javascript створює порожній масив заданого розміру


94

у javascript, як би я створив порожній масив заданого розміру

Код Psuedo:

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
OP надав приклад "порожнього".
RobG

6
Ну, це ще один варіант питання. Вони можуть вибрати будь-яку із запропонованих відповідей, ось у чому слава
stackoverflow

235

1) Щоб створити новий масив, який ви не можете повторити , ви можете використати конструктор масиву:

Array(100) або new Array(100)


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

а) Усі версії JavaScript

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

б) З версії JavaScript ES6

  • Оператор деструктуризації: [...Array(100)]
  • Array.prototype.fill Array(100).fill(undefined)
  • Масив. Від 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]


1
Array.prototype.fill (> = ES6) kangax.github.io/compat-table/es6/… ;
ptim

4
Просвітлення доби - коли ви частково згадаєте (А), що новостворений масив із використанням синтаксису конструктора навіть не піддається ітерації. 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]
Полв

44

Ми використовуємо Array.from({length: 500})з 2017 року.


@ 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("");

.fill()- це елегантне рішення для одного вкладиша. Дякую!
colefner

15

У 2018 році і надалі ми будемо використовувати [...Array(500)]з цією метою.


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('');

2
new Array (2) не дає вам [undefined, undefined]. Це дає вам масив, який не можна повторити.
ГФД

В ПОРЯДКУ. Ще щось відбувається, чого я не розумію. Я створюю новий масив, new Array(2)а те, що я повертаю, - [ <2 empty items> ]ні [undefined, undefined]. Використання .mapпершого не впливає. Однак я можу перебирати його за допомогою for...ofциклу. Якщо я створюю новий масив, використовуючи буквальні нотації, a = [undefined, undefined]я можу використовувати .mapйого.
ГФД

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)


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>

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.