javascript tworzy pustą tablicę o podanym rozmiarze


Odpowiedzi:


71
var arr = new Array(5);
console.log(arr.length) // 5

15
Zapytał OP in javascript how would I create an empty array of a given size. To rozwiązuje ten problem.
mariocatch

14
PO podał przykład „pustego”.
RobG

8
Cóż, to kolejna opcja na pytanie. Mogą wybrać dowolną z udzielonych odpowiedzi, to jest chwała stackoverflow :)
mariocatch

250

1) Aby utworzyć nową tablicę, po której nie możesz iterować , możesz użyć konstruktora tablicy:

Array(100) lub new Array(100)


2) Możesz utworzyć nową tablicę, którą można iterować jak poniżej:

a) Wszystkie wersje JavaScript

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

b) Z wersji ES6 JavaScript

  • Operator destrukturyzacji: [...Array(100)]
  • Array.prototype.fill Array(100).fill(undefined)
  • Array.from Array.from({ length: 100 })

Możesz mapować te tablice, jak poniżej.

  • 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
Oświecenie dnia - kiedy wspomnisz w części (A), że nowo utworzona tablica wykorzystująca składnię konstruktora nie jest nawet iterowalna. JavaScript czasem naprawdę zaskakuje.
RBT

Jaki jest rozmiar Array(10000)z empty x 10000?
Qwerty

1
Jego długość to 10000, możesz to sprawdzić, console.log(Array(10000).length)ale jeśli uruchomisz Array(10000).forEach((u, i) => console.log(i)), nie otrzymasz żadnego wyniku
stpoa

Array.apply('x', Array(10))jest właściwie[undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
Polv

47

Używamy Array.from({length: 500})od 2017 roku.


@ gion_13: Widzę, że głosowanie jest w górę, a moje w głosowaniu w dół. Powód?
7vujy0f0hy

1
@ 7vujy0f0hy Nie wiem, dlaczego dostałeś głosy w dół. Oddałem głos za, chociaż Twoje rozwiązanie jest nieco mniej intuicyjne niż to.
gion_13

@ gion_13: Dziękuję za potwierdzenie, że nie ma nic złego w moim rozwiązaniu ☺.
7vujy0f0hy

18

Spróbuj użyć whilepętli,Array.prototype.push()

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

Alternatywnie, używając Array.prototype.fill()

var myArray = Array(3).fill("");

1
.fill()to eleganckie rozwiązanie z jednym wkładem. Dzięki!
colefner

17

W 2018 r. I odtąd będziemy używać [...Array(500)]do tego celu.


2
w przyszłość!
Levi

Co zabawne, to (i podobne) jest o 50% wolniejsze niż zwykłe (() => { let n = []; for(var i=0;i<500;i++){y.push("");} return n; })().
Alex

To cuchnie przedwczesną optymalizacją, być może jeśli zamierzasz utworzyć zbiór tablic z dziesiątkami milionów elementów, możesz to rozważyć, ale kilka nanosekund w większości przypadków nie sprawi, że będzie to warte trafienia w czytelność .
JaredMcAteer

11

Od ES5 (kiedy podano tę odpowiedź):

Jeśli chcesz mieć pustą tablicę undefinedelementów, możesz po prostu to zrobić

var whatever = new Array(5);

to dałoby ci

[undefined, undefined, undefined, undefined, undefined]

a jeśli chcesz, aby był wypełniony pustymi łańcuchami, możesz to zrobić

whatever.fill('');

co by ci dało

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

A jeśli chcesz to zrobić w jednej linii:

var whatever = Array(5).fill('');

3
new Array (2) nie daje [undefined, undefined]. Daje tablicę, której nie można iterować.
JCF

DOBRZE. Jest coś jeszcze, czego nie rozumiem. Tworzę nową tablicę, new Array(2)a to, co otrzymuję, [ <2 empty items> ]nie jest [undefined, undefined]. Używanie .mapna tym pierwszym nie ma żadnego efektu. Jednak mogę go iterować za pomocą for...ofpętli. Jeśli utworzę nową tablicę przy użyciu notacji dosłownej a = [undefined, undefined], mogę .mapna niej użyć .
JCF

2
@JCF for ... of używa protokołu iteratora, więc zachowuje się inaczej niż forEach / map. Iteratory tracą informację o pustce
Tomasz Błachut

2
@ TomaszBłachut @JCF Dla słabszych pamiętajcie, że takiej odpowiedzi udzielono ponad 4 lata temu - wtedy odpowiedź była w 100% aktualna. Wersje ES6 i ES7 zaczęły pojawiać się w przeglądarkach odpowiednio dopiero w połowie 2016 i połowie 2018 roku. W momencie tej odpowiedzi wersją JS byłaby ES5. Jeśli potrzebujesz dowodu, że to jest droga ES5 pracowali, po prostu kręcić się starszą instancji Chrome - w czasie tej odpowiedzi, to byłoby V48 - i run Array(5). Pojawi się następujący komunikat: [undefined x 5].
jeffdill2

2
@ jeffdill2 Najlepiej jest dodać nowe informacje do samej odpowiedzi. Komentarze nie zawsze są w pełni przeczytane.
Boaz

4

Jeśli chcesz utworzyć anonimową tablicę z pewnymi wartościami, możesz użyć tej składni.

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


0

Możesz używać razem metod javascript repeat () i split ().

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

Ten kod utworzy tablicę zawierającą 10 elementów, a każdy element jest pustym ciągiem.

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

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

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

</pre>

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.