Подтвердить что ты не робот

Javascript - Создать простой динамический массив

Каков наиболее эффективный способ создания этого простого массива динамически.

var arr = [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];

Скажем, мы можем получить число 10 от переменной

var mynumber = 10;
4b9b3361

Ответ 1

var arr = [];
for(var i=1; i<=mynumber; i++) {
   arr.push(i.toString());
}

Ответ 2

Вот как я это сделаю:

var mynumber = 10;
var arr = new Array(mynumber);

for (var i = 0; i < mynumber; i++) {
    arr[i] = (i + 1).toString();
}

Мой ответ почти одинаковый для всех, но обратите внимание, что я сделал что-то другое:

  • Лучше указать длину массива и не заставляйте его расширяться каждый раз

Итак, я создал массив с new Array(mynumber);

Ответ 3

С ES2015 это можно сделать кратко в одном выражении с Array.from метода Array.from например:

Array.from({ length: 10 }, (_, idx) => '${++idx}')

Первым аргументом from является объект, похожий на массив, который предоставляет свойство length. Второй аргумент - это функция карты, которая позволяет нам заменять undefined значения по умолчанию их скорректированными значениями индекса по вашему запросу. Проверьте спецификацию здесь

Ответ 4

Похоже, вы просто хотите построить массив, содержащий строковые версии целочисленных значений. Простой подход:

var arr = [];
for (var i = 1; i <= mynumber; i++) arr.push(""+i);

Для более интересной версии вы можете сделать генератор...

function tail(i, maxval) {
    return [i].concat(i < maxval ? tail(i+1, maxval) : []);
}

var arr = tail(1, mynumber);

Ответ 5

var arr = [];
while(mynumber--) {
    arr[mynumber] = String(mynumber+1);
}

Ответ 6

Я бы сделал следующее:

var num = 10,
  dynar = [...Array(num)].map((_,i) => ++i+"");
console.log(dynar);

Ответ 7

неправильно прочитал вопрос, исправил. Попробуйте:

var myNumber = 100,
    myarr = (function arr(i){return i ? arr(i-1).concat(i) : [i]}(myNumber));

Просто для удовольствия, если вы расширяете Array следующим образом:

Array.prototype.mapx = function(callback){
  return String(this).split(',').map(callback);
}

Вы можете использовать:

var myNum = 100, 
    myarr = new Array(myNum).mapx(function(el,i){return i+1;});

Ответ 8

Этот ответ о "как динамически создать массив без цикла ".

Литеральный оператор [] не позволяет нам создавать динамически, поэтому давайте посмотрим на Array, его конструктор и его методы.

В ES2015 Array есть метод .from(), который легко позволяет нам создавать динамический Array:

Array.from({length: 10}) // -> [undefined, undefined, undefined, ... ]

Когда конструктор Array получает число в качестве первого параметра, он создает массив с размером этого числа, но он не повторяется, поэтому мы не можем использовать .map(), .filter() и т. .filter().:

new Array(10) // -> [empty × 10]

Но если мы передадим более одного параметра, мы получим массив из всех параметров:

new Array(1,2,3) // -> [1,2,3]

Если бы мы использовали ES2015, мы могли бы использовать оператор распространения, который будет распространять пустой массив внутри другого массива, поэтому мы получим итеративный массив:

[...new Array(10)]  // -> [undefined, undefined, undefined, ...]

Но если мы не используем ES2015 и не имеем полизаполнения, в ES5 также есть способ создать динамический массив без цикла. Если мы подумаем о .apply(): он распространяет массив второго аргумента на params. Таким образом, вызов apply для конструктора Array поможет:

Array.apply(null, new Array(10))  // -> [undefined, undefined, undefined, ...]

После того, как у нас есть динамический итерируемый массив, мы можем использовать карту для назначения динамических значений:

Array.apply(null, new Array(10)).map(function(el, i) {return ++i + ""})

// ["1","2","3", ...]

Ответ 9

Если вы спрашиваете, есть ли встроенная функция Pythonic range -like, это не так. Вы должны сделать это грубо. Может быть, rangy будет вам интересен.

Ответ 10

var arr = [];
for(var i=1; i<=mynumber; i++) {
   arr.push("" + i);
}

В Chrome, похоже, быстрее, в соответствии с JSPerf, но учтите, что все зависит от браузера.

Есть 4 вещи, которые вы можете изменить в этом фрагменте:

  • Используйте for или while.
  • Использовать прямой или обратный цикл (с обратным созданием разреженного массива в начале)
  • Используйте push или прямой доступ по индексу.
  • Используйте неявное стробирование или явно вызываем toString.

В каждой обозревателе общая скорость будет сочетанием того, насколько лучше каждый параметр для каждого элемента в этом списке выполняется в этом конкретном браузере.

TL; DR: вероятно, не стоит пытаться микро-оптимизировать эту часть.

Ответ 11

У меня была похожая проблема, и решение, которое я нашел (забыл, где я нашел это), это:

Array.from(Array(mynumber), (val, index) => index + 1)

Ответ 12

Я надеюсь, что вы должны получить последний элемент из переменной массива, так что мое решение

var arr = [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];
var mynumber = arr [arr .length - 1];
//var mynumber = 10;

Ответ 13

То же самое, что и для всех массивов, которые вы хотите заполнить динамически. A для цикла. Код suedo

arr =array()
for(i; i<max; i++){
 arr[]=i

}

который должен помочь вам на пути