Перейти к содержимому

Как преобразовать число в массив js

  • автор:

Как числа преобразовать в массив?

Суть в том, что не могу получить полный массив из чисел. Что только не перебирал для этого, но он заносит только первое значение в массив. Как решить данную проблему? Пытался преобразовать в строку, но тоже выводит только 1 значение.

function mostNumbers(numbers) < var arr = [numbers]; console.log(arr); >console.log(mostNumbers(1, 2, 3));

Отслеживать
71.9k 12 12 золотых знаков 91 91 серебряный знак 180 180 бронзовых знаков
задан 11 дек 2017 в 19:47
Vladislav Zhuravlev Vladislav Zhuravlev
53 1 1 золотой знак 1 1 серебряный знак 4 4 бронзовых знака

4 ответа 4

Сортировка: Сброс на вариант по умолчанию

function mostNumbers() < return Array.from(arguments); >console.log(mostNumbers(3, 2, 7));

Отслеживать
ответ дан 11 дек 2017 в 20:35
Rostyslav Kuzmovych Rostyslav Kuzmovych
5,980 1 1 золотой знак 19 19 серебряных знаков 26 26 бронзовых знаков

function mostNumbers() < return [. arguments]; >console.log(mostNumbers(3, 2, 7));
function mostNumbers(. numbers) < return numbers; >console.log(mostNumbers(3, 2, 7));

Проблема данных методов на данном этапе, что нет проверки на тип. Поэтому либо надо доверять тому, что приходит в функцию, либо делать проверку, а это цикл ¯\_(ツ)_/¯

Отслеживать
ответ дан 11 дек 2017 в 20:52
Алексей Шиманский Алексей Шиманский
71.9k 12 12 золотых знаков 91 91 серебряный знак 180 180 бронзовых знаков
Или писать на TypeScript ))
18 дек 2017 в 17:12

function mostNumbers() < var arr = []; for (var i = 0; i < arguments.length; i++) < arr.push(arguments[i]); >return arr; > console.log(mostNumbers(1, 2, 3));

Отслеживать
ответ дан 11 дек 2017 в 20:18
user176262 user176262
Спасибо,теперь стало все понятно))
11 дек 2017 в 21:09

Дело в том, что в твоем примере функция всегда принимает только один параметр, сколько бы ты их ни передавал в функцию. Это ты и наблюдаешь.

Почитай про функции с произвольным кол-вом параметров и как получить к ним доступ, например: https://learn.javascript.ru/arguments-pseudoarray

Т.е. узнаешь кол-во параметров, создаешь массив нужного размера, а потом в цикле заполняешь.

Ну или передавай как параметр сразу массиы целиком,

Отслеживать
ответ дан 11 дек 2017 в 20:21
37.3k 4 4 золотых знака 28 28 серебряных знаков 72 72 бронзовых знака

Спасибо за совет, потихоньку дохожу уже до этих статей)) Но суть задачи заключалась именно в том, чтобы передавать 1 параметру несколько чисел

Преобразование числа в массив в JavaScript

Преобразование числа в массив заключается в том, что мы разбиваем число на цифры, которые будут являться элементами массива.

Рассмотрим самые популярные подходы осуществления данной операции.

Array.from()

Метод позволяет преобразовать в массив указанный строчный элемент. Поскольку исходные данные числового типа, их необходимо сделать строкой. Однако, чтобы массив состоял из чисел, их необходимо обратно преобразовать. Получается некая двойная конвертация.

const num = 48621; const arrayOfStrings = Array.from(String(num)); // ['4', '8', '6', '2', '1'] - без обратного преобразования получим массив из строк const arrayOfDigits = Array.from(String(num), Number); // [4, 8, 6, 2, 1]

map()

Способ сутью похож на предыдущий, но только преобразование в строку выполняем, добавляя пустой элемент, перебираем числа с помощью метода map() , а обратное конвертирование осуществляем унарным оператором.

let num = 48621; let array = ('' + num).split('').map(function(digit)< return +digit; >); // [4, 8, 6, 2, 1]

Цикл while

Чтобы избежать лишних преобразований в строки, можно воспользоваться циклом while , который будет отрабатывать столько раз, сколько разрядностей у нашего числа. Хитрый способ заключается в том, что на каждой итерации цикла мы делим число на 10 , остаток заносим в массив и уменьшаем разрядность числа.

let num = 48621; let array = []; while(num>0) < array.unshift(num%10); num=num/10|0; >// [4, 8, 6, 2, 1]

Array.from()

Метод Array.from() создаёт новый экземпляр Array из массивоподобного или итерируемого объекта.

Интерактивный пример

Синтаксис

Array.from(arrayLike[, mapFn[, thisArg]])

Параметры

Массивоподобный или итерируемый объект, преобразуемый в массив.

Отображающая функция, вызываемая для каждого элемента массива.

Значение, используемое в качестве this при выполнении функции mapFn .

Возвращаемое значение

Описание

Array.from() позволяет вам создавать массивы из:

  • массивоподобных объектов (объектов со свойством length и элементами по индексным ключам) или
  • итерируемых объектов (объектов, из которых вы можете достать их элементы, например Map (en-US) или Set ).

Array.from() имеет необязательный параметр mapFn , который позволяет вам выполнять функцию map для каждого элемента создаваемого массива (или его подкласса). Проще говоря, вызов Array.from(obj, mapFn, thisArg) эквивалентен цепочке Array.from(obj).map(mapFn, thisArg) , за исключением того, что он не создаёт промежуточного массива. Это особенно важно для некоторых подклассов массива, вроде типизированных массивов, поскольку промежуточный массив неизбежно приведёт к усечению значений, чтобы они подпали под подходящий тип.

Свойство length метода from() равно 1.

В ES2015 классовый синтаксис позволяет создавать подклассы как встроенных классов, так и классов, определённых пользователем; в результате статические методы класса, вроде Array.from «наследуются» подклассами Array и создают новые экземпляры подкласса, а не класса Array .

Примеры

Массив из строки String

.from("foo"); // ['f', 'o', 'o'] 

Массив из Set

var s = new Set(["foo", window]); Array.from(s); // ['foo', window] 

Массив из Map

var m = new Map([ [1, 2], [2, 4], [4, 8], ]); Array.from(m); // [[1, 2], [2, 4], [4, 8]] 

Массив из массивоподобного объекта (arguments)

function f()  return Array.from(arguments); > f(1, 2, 3); // [1, 2, 3] 

Использование стрелочной функции и Array.from()

// Использование стрелочной функции в качестве функции отображения для // манипулирования элементами Array.from([1, 2, 3], (x) => x + x); // [2, 4, 6] // Генерирования последовательности чисел Array.from( length: 5 >, (v, k) => k); // [0, 1, 2, 3, 4] 

Полифил

Метод Array.from был добавлен к стандарту ECMA-262 в 6-м издании; поэтому он может отсутствовать в других реализациях стандарта. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использовать Array.from в реализациях, которые не поддерживают этот метод. Этот алгоритм является точно тем, что описан в ECMA-262 6-го издания; он предполагает, что Object и TypeError имеют свои первоначальные значения и что callback.call вычисляется в оригинальное значение Function.prototype.call . Кроме того, поскольку истинные итерируемые объекты не могут быть заменены полифилом, эта реализация не поддерживает общие итерируемые объекты, как они определены в 6-м издании ECMA-262.

// Шаги алгоритма ECMA-262, 6-е издание, 22.1.2.1 // Ссылка: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.from if (!Array.from)  Array.from = (function ()  var toStr = Object.prototype.toString; var isCallable = function (fn)  return typeof fn === "function" || toStr.call(fn) === "[object Function]"; >; var toInteger = function (value)  var number = Number(value); if (isNaN(number))  return 0; > if (number === 0 || !isFinite(number))  return number; > return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number)); >; var maxSafeInteger = Math.pow(2, 53) - 1; var toLength = function (value)  var len = toInteger(value); return Math.min(Math.max(len, 0), maxSafeInteger); >; // Свойство length метода from равно 1. return function from(arrayLike /*, mapFn, thisArg */)  // 1. Положим C равным значению this. var C = this; // 2. Положим items равным ToObject(arrayLike). var items = Object(arrayLike); // 3. ReturnIfAbrupt(items). if (arrayLike == null)  throw new TypeError( "Array.from requires an array-like object - not null or undefined", ); > // 4. Если mapfn равен undefined, положим mapping равным false. var mapFn = arguments.length > 1 ? arguments[1] : void undefined; var T; if (typeof mapFn !== "undefined")  // 5. иначе // 5. a. Если вызов IsCallable(mapfn) равен false, выкидываем исключение TypeError. if (!isCallable(mapFn))  throw new TypeError( "Array.from: when provided, the second argument must be a function", ); > // 5. b. Если thisArg присутствует, положим T равным thisArg; иначе положим T равным undefined. if (arguments.length > 2)  T = arguments[2]; > > // 10. Положим lenValue равным Get(items, "length"). // 11. Положим len равным ToLength(lenValue). var len = toLength(items.length); // 13. Если IsConstructor(C) равен true, то // 13. a. Положим A равным результату вызова внутреннего метода [[Construct]] // объекта C со списком аргументов, содержащим единственный элемент len. // 14. a. Иначе, положим A равным ArrayCreate(len). var A = isCallable(C) ? Object(new C(len)) : new Array(len); // 16. Положим k равным 0. var k = 0; // 17. Пока k < len, будем повторять. (шаги с a по h)var kValue; while (k  len)  kValue = items[k]; if (mapFn)  A[k] = typeof T === "undefined" ? mapFn(kValue, k) : mapFn.call(T, kValue, k); > else  A[k] = kValue; > k += 1; > // 18. Положим putStatus равным Put(A, "length", len, true). A.length = len; // 20. Вернём A. return A; >; >)(); > 

Спецификации

Specification
ECMAScript Language Specification
# sec-array.from

Совместимость с браузерами

BCD tables only load in the browser

Array.prototype.toString()

Метод toString() возвращает строковое представление указанного массива и его элементов.

Синтаксис

arr.toString()

Параметры

Описание

Объект Array переопределяет метод toString объекта Object . Для объектов класса Array , метод toString соединяет массив и возвращает одну строку, содержащую каждый элемент массива, разделённый запятыми. Например, следующий код создаёт массив и использует метод toString для преобразования массива в строку.

var monthNames = ["Янв", "Фев", "Мар", "Апр"]; var myVar = monthNames.toString(); // присваивает 'Янв,Фев,Мар,Апр' переменной myVar. 

JavaScript вызывает метод toString автоматически, когда массив представляется текстовым значением или когда массив находится в контексте конкатенации строк.

Семантика ECMAScript 5

Начиная с JavaScript 1.8.5 (Firefox 4), и в соответствии с семантикой ECMAScript 5-го издания, метод toString() является обобщённым и может использоваться с любым объектом. В случае с массивами, если он имеет метод join() , он будет вызван и результат его работы будет возвращён. В противном случае будет вызван метод Object.prototype.toString() , и будет возвращён результат его работы.

Спецификации

Specification
ECMAScript Language Specification
# sec-array.prototype.tostring

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

This page was last modified on 4 авг. 2023 г. by MDN contributors.

Your blueprint for a better internet.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *