Создание массива в Javascript

Как создать массив с длиной 3 и значением для элемента массива 0. Если я даю длину массива как 3, тогда массив должен быть таким, как показано ниже

  a[0]=0;
  a[1]=0;
  a[2]=0;

Я пробовал этот new Array(3), он создает массив a[,,,] длины 3, а new Array(0,0,0) создает массив a[0,1,2]. Можно ли создать массив, указав длину и значение для элемента массива?

Заранее спасибо


person user3326265    schedule 24.07.2014    source источник
comment
Несколько интересных ответов о том, как создать предварительно заполненный массив на этом опубликовать.   -  person Andy    schedule 24.07.2014
comment
and new Array(0,0,0) создает массив a[0,1,2] - нет, он создает массив [0,0,0], который вы ищете.   -  person nnnnnn    schedule 24.07.2014


Ответы (1)


Можно ли создать массив, указав длину и значение элемента массива?

Если вы имеете в виду какой-то предварительно инициализирующий конструктор или операцию заполнения, нет, в JavaScript этого нет.

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

a = [0, 0, 0];

Это называется инициализатор массива < / а>.

Если вы заранее не знаете (например, при написании кода), насколько большим должен быть массив, вы можете просто заполнить его по мере необходимости:

a = [];
var index;
for (index = 0; index < initialSize; ++index) {
    a[index] = 0;
}

Обратите внимание, что вам не нужно заранее выделять место в массиве; массив может «расти» по мере необходимости. (Это может показаться странным, но стандартные массивы JavaScript на самом деле не являются массивами в все, хотя движки JavaScript часто пытаются использовать настоящие массивы для оптимизации, если считают, что могут.)

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

a = new Array(initialSize);

... а не a = []; выше. (Подробнее об этом ближе к концу.)

При желании для этого можно добавить функцию к объекту Array function:

Array.createFilled(length, value) {
    var a = new Array(length); // Or of course, `var a = [];`
    var i;
    for (i = 0; i < length; ++i) {
        a[i] = value;
    }
    return a;
}

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

var a = Array.createFilled(3, 0); // 0,0,0

Боковое примечание: всегда обязательно объявляйте свои переменные, например, укажите var a; где-то перед строкой выше.


Очевидно, что если заранее сообщить движку, какого размера должен быть массив, это позволит лучше оптимизировать, верно? Не обязательно! Это может помочь некоторым движкам (немного), мешать другим (немного) и / или не иметь никакого значения:

диаграмма сокращает результаты jsperf: Chrome - самый быстрый без длины, Firefox - самый быстрый с длиной в конструкторе, а IE11 - безразлично»></p>
                        <div class= person T.J. Crowder    schedule 24.07.2014

comment
Хотя это неявно указано в вашем ответе, я думаю, было бы неплохо указать, что массивы не нужно инициализировать с определенной длиной - person Moritz Roessler; 24.07.2014
comment
Боковое примечание: я бы не рекомендовал расширять базовые функциональные объекты javascript собственными методами. Есть вероятность нарушения некоторых других функций этих объектов. (Я помню, что читал из книги «Эффективный JavaScript: 68 конкретных способов использовать возможности JavaScript»). Кроме того, я думаю, что существование этих методов может быть довольно запутанным или неизвестным другим разработчикам, поскольку все, что они видят, - это обычный объект функции Array. - person Mauno Vähä; 24.07.2014
comment
@MaunoV .: Это больше проблема, если вы добавляете вещи в прототипы, прикрепленные к вещам, например Array.prototype. Но да, есть вероятность столкновения, если кто-то еще добавит что-то под названием createFilled к объекту функции конструктора Array. Мое мнение таково: это нормально делать это в собственном коде, но не в библиотеках, которые будут использовать другие. Но, конечно, App.Utils.createFilled подойдет. :-) - person T.J. Crowder; 24.07.2014