javascript создает пустой массив заданного размера

94

в javascript, как мне создать пустой массив заданного размера

Псевдокод:

X = 3;
createarray(myarray, X, "");

выход:

   myarray = ["","",""]
гас
источник
2
Вы, вероятно, использовали бы Array.prototype.fill .
RobG
Возможное дублирование значений массива
Ник Грили
Связанный пост здесь .
RBT

Ответы:

67
var arr = new Array(5);
console.log(arr.length) // 5
мариокач
источник
14
- спросил ОП in javascript how would I create an empty array of a given size. Это решает эту проблему.
mariocatch
12
ОП предоставила пример «пустого».
RobG
6
Ну это еще один вариант вопроса. Они могут выбрать любой из представленных ответов, в этом слава stackoverflow :)
mariocatch
235

1) Чтобы создать новый массив, который вы не можете перебирать , вы можете использовать конструктор массива:

Array(100) или new Array(100)


2) Вы можете создать новый массив, который можно повторять, как показано ниже:

а) Все версии JavaScript

  • Array.apply: Array.apply(null, Array(100))

б) Из версии ES6 JavaScript

  • Оператор деструктуризации: [...Array(100)]
  • Array.prototype.fill Array(100).fill(undefined)
  • Array.from Array.from({ length: 100 })

Вы можете сопоставить эти массивы, как показано ниже.

  • Array(4).fill(null).map((u, i) => i) [0, 1, 2, 3]

  • [...Array(4)].map((u, i) => i) [0, 1, 2, 3]

  • Array.apply(null, Array(4)).map((u, i) => i) [0, 1, 2, 3]

  • Array.from({ length: 4 }).map((u, i) => i) [0, 1, 2, 3]

stpoa
источник
1
Array.prototype.fill (> = ES6) kangax.github.io/compat-table/es6/… ;
ptim
4
Просвещение дня - когда вы упоминаете в части (A), что вновь созданный массив с использованием синтаксиса конструктора даже не является итерационным. Javascript иногда действительно удивляет.
RBT
Какой размер Array(10000)с empty x 10000?
Qwerty
1
Его длина составляет 10000, вы можете проверить это, console.log(Array(10000).length)но если вы запустите Array(10000).forEach((u, i) => console.log(i)), вы не получите никакого вывода
stpoa
Array.apply('x', Array(10))на самом деле[undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
Polv 04
44

Используем Array.from({length: 500})с 2017 года.

andrewkslv
источник
@ gion_13: Я вижу, что за него голосуют, а за мой - против. Причина?
7vujy0f0hy
@ 7vujy0f0hy Я не знаю, почему у вас остались голоса. Я проголосовал за вас, хотя ваше решение немного менее интуитивно понятно, чем это.
gion_13
@ gion_13: Спасибо, что подтвердили, что с моим решением все в порядке ☺.
7vujy0f0hy
17

Попробуйте использовать whileцикл,Array.prototype.push()

var myArray = [], X = 3;
while (myArray.length < X) {
  myArray.push("")
}

В качестве альтернативы, используя Array.prototype.fill()

var myArray = Array(3).fill("");
гость271314
источник
.fill()это элегантное однострочное решение. Благодарность!
colefner
15

В 2018 году и в дальнейшем мы будем использовать [...Array(500)]для этого.

7vujy0f0hy
источник
1
в будущее!
Леви
Как ни странно, это (и подобное) на 50% медленнее, чем просто (() => { let n = []; for(var i=0;i<500;i++){y.push("");} return n; })().
Алекс
Это пахнет преждевременной оптимизацией, возможно, если вы собираетесь создать кучу массивов с десятками миллионов элементов, вы, возможно, захотите это рассмотреть, но несколько наносекунд, в большинстве случаев, не сделают это достойным удара по удобочитаемости. .
JaredMcAteer,
10

Начиная с ES5 (когда был дан этот ответ):

Если вам нужен пустой массив undefinedэлементов, вы можете просто сделать

var whatever = new Array(5);

это даст вам

[undefined, undefined, undefined, undefined, undefined]

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

whatever.fill('');

что даст вам

["", "", "", "", ""]

И если вы хотите сделать это одной строкой:

var whatever = Array(5).fill('');
jeffdill2
источник
2
new Array (2) не дает вам [undefined, undefined]. Это дает вам массив, который не может быть повторен.
JCF
ОК. Есть еще кое-что, чего я не понимаю. Я создаю новый массив, new Array(2)а то, что я получаю, - [ <2 empty items> ]нет [undefined, undefined]. С помощью.map первого не имеет никакого эффекта. Однако я могу перебирать его с помощью for...ofцикла. Если я создам новый массив, используя буквальную нотацию, a = [undefined, undefined]я могу использовать .mapего.
JCF
1
@JCF for ... of использует протокол итератора, поэтому он ведет себя иначе, чем forEach / map. Итераторы теряют информацию о пустоте
Томаш Блахут
@ TomaszBłachut @JCF Для тех, кто проголосовал против, имейте в виду, что этот ответ был дан более 4 лет назад - в то время этот ответ был на 100% достоверным. ES6 и ES7 не начали развертываться в браузерах до середины 2016 и середины 2018 года соответственно. На момент ответа JS-версия была ES5. Если вам нужно еще доказательство , что это является как ES5 работал, просто раскрутить старый экземпляр Chrome - во время этого ответа, было бы V48 - и бежать Array(5). Вы увидите следующий вывод: [undefined x 5].
jeffdill2,
@ jeffdill2 Лучше всего добавлять новую информацию к самому ответу. Комментарии не всегда читаются полностью.
Вооз
4

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

var arr = new Array(50).fill().map((d,i)=>++i)
console.log(arr)

манан5439
источник
0

Вы можете использовать оба метода javascript repeat () и split () вместе.

" ".repeat(10).split(" ")

Этот код создаст массив из 10 элементов, каждый из которых представляет собой пустую строку.

const items = " ".repeat(10).split(" ")

document.getElementById("context").innerHTML = items.map((item, index) => index)

console.log("items: ", items)
<pre id="context">

</pre>

Серхан С.
источник