javascript tạo mảng trống có kích thước nhất định


Câu trả lời:


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

14
OP hỏi in javascript how would I create an empty array of a given size. Điều này giải quyết vấn đề đó.
mariocatch

12
OP đã cung cấp một ví dụ về "trống".
RobG

6
Đây là một lựa chọn khác cho câu hỏi. Họ có thể chọn bất kỳ câu trả lời nào được cung cấp, đó là vinh quang của stackoverflow :)
mariocatch

235

1) Để tạo mảng mới mà bạn không thể lặp lại , bạn có thể sử dụng hàm tạo mảng:

Array(100) hoặc là new Array(100)


2) Bạn có thể tạo mảng mới, có thể được lặp lại như sau:

a) Tất cả các phiên bản JavaScript

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

b) Từ phiên bản JavaScript ES6

  • Toán tử hủy cấu trúc: [...Array(100)]
  • Array.prototype.fill Array(100).fill(undefined)
  • Array.from Array.from({ length: 100 })

Bạn có thể ánh xạ qua các mảng này như bên dưới.

  • 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
Sự khai sáng của ngày - khi bạn đề cập trong phần (A) rằng một mảng mới được tạo bằng cách sử dụng cú pháp hàm tạo thậm chí không thể lặp lại. Javascript đôi khi thực sự gây ngạc nhiên.
RBT

Kích thước của Array(10000)với là empty x 10000gì?
Qwerty

1
Chiều dài của nó là 10000, bạn có thể kiểm tra nó bằng cách console.log(Array(10000).length)Nhưng nếu bạn chạy Array(10000).forEach((u, i) => console.log(i)), bạn sẽ nhận được không có đầu ra
stpoa

Array.apply('x', Array(10))thực sự là[undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]
Polv

44

Chúng tôi sử dụng Array.from({length: 500})từ năm 2017.


@ gion_13: Tôi thấy nó được bình chọn cao và của tôi bị bỏ phiếu. Lý do?
7vujy0f0hy

@ 7vujy0f0hy Tôi không biết tại sao bạn lại bị hạ phiếu. Tôi đã cho bạn một phiếu bầu, mặc dù giải pháp của bạn hơi kém trực quan hơn giải pháp này.
gion_13,

@ gion_13: Cảm ơn bạn đã xác nhận không có gì sai với giải pháp của tôi ☺.
7vujy0f0hy

17

Hãy thử sử dụng whilevòng lặp,Array.prototype.push()

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

Ngoài ra, sử dụng Array.prototype.fill()

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

.fill()là một giải pháp thanh lịch một lớp lót. Cảm ơn!
colefner

15

Trong năm 2018 và kể từ đó, chúng tôi sẽ sử dụng [...Array(500)]để kết thúc điều đó.


1
trong tương lai!
Levi

Điều thú vị là điều này (và tương tự) chậm hơn 50% so với chỉ (() => { let n = []; for(var i=0;i<500;i++){y.push("");} return n; })().
Alex

Đó là vài tuần tối ưu hóa quá sớm, có thể nếu bạn đang có ý định tạo một loạt các mảng với hàng chục triệu phần tử, bạn có thể muốn xem xét nó nhưng một vài nano giây, đối với hầu hết các trường hợp, sẽ không đáng để đọc được. .
JaredMcAteer

10

Kể từ ES5 (khi câu trả lời này được đưa ra):

Nếu bạn muốn một mảng rỗng các undefinedphần tử, bạn chỉ cần làm

var whatever = new Array(5);

cái này sẽ cho bạn

[undefined, undefined, undefined, undefined, undefined]

và sau đó nếu bạn muốn nó chứa đầy các chuỗi trống, bạn có thể làm

whatever.fill('');

cái nào sẽ cho bạn

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

Và nếu bạn muốn làm điều đó trong một dòng:

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

2
Mảng mới (2) không cung cấp cho bạn [không xác định, không xác định]. Nó cung cấp cho bạn một mảng không thể lặp lại.
JCF

ĐỒNG Ý. Có điều gì đó khác đang xảy ra tôi không hiểu. Tôi đang tạo một mảng mới với new Array(2)và những gì tôi nhận lại thì [ <2 empty items> ]không [undefined, undefined]. Sử dụng .maptrước đây không có tác dụng. Tuy nhiên, tôi có thể lặp lại nó bằng cách sử dụng một for...ofvòng lặp. Nếu tôi tạo một mảng mới bằng cách sử dụng ký hiệu chữ a = [undefined, undefined]thì tôi có thể sử dụng .maptrên đó.
JCF

1
@JCF cho ... of sử dụng giao thức trình lặp, vì vậy nó hoạt động khác với forEach / map. Trình lặp lại thông tin trống rỗng
Tomasz Błachut

@ TomaszBłachut @JCF Đối với những người bỏ phiếu, xin lưu ý rằng câu trả lời này đã được đưa ra cách đây hơn 4 năm - tại thời điểm đó, câu trả lời này hoàn toàn hợp lệ. ES6 và ES7 đã không bắt đầu ra mắt các trình duyệt cho đến giữa năm 2016 và giữa năm 2018. Tại thời điểm câu trả lời này, phiên bản JS sẽ là ES5. Nếu bạn cần thêm bằng chứng rằng đây cách ES5 hoạt động, chỉ cần quay một phiên bản Chrome cũ hơn - tại thời điểm câu trả lời này, nó sẽ là v48 - và chạy Array(5). Bạn sẽ thấy kết quả như sau: [undefined x 5].
jeffdill2

@ jeffdill2 Tốt nhất bạn nên thêm thông tin mới vào chính câu trả lời. Các bình luận không phải lúc nào cũng được đọc đầy đủ.
Boaz

4

Nếu bạn muốn tạo mảng ẩn danh với một số giá trị để bạn có thể sử dụng cú pháp này.

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


0

Bạn có thể sử dụng cả hai phương thức javascript repeat () và split () cùng nhau.

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

Mã này sẽ tạo một mảng có 10 mục và mỗi mục là chuỗi trống.

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

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

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

</pre>

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.