javascript สร้างอาร์เรย์ว่างในขนาดที่กำหนด


94

ในจาวาสคริปต์ฉันจะสร้างอาร์เรย์ว่างขนาดที่กำหนดได้อย่างไร

รหัส 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 :)
mariocatch

235

1)ในการสร้างอาร์เรย์ใหม่ซึ่งคุณไม่สามารถวนซ้ำได้คุณสามารถใช้ตัวสร้างอาร์เรย์:

Array(100) หรือ new Array(100)


2)คุณสามารถสร้างอาร์เรย์ใหม่ซึ่งสามารถทำซ้ำได้ดังนี้:

ก) JavaScript ทุกเวอร์ชัน

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

b)จากเวอร์ชัน 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]


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

4
การตรัสรู้ประจำวัน - เมื่อคุณพูดถึงบางส่วน (A) ว่าอาร์เรย์ที่สร้างขึ้นใหม่โดยใช้ไวยากรณ์ตัวสร้างนั้นไม่สามารถทำซ้ำได้ Javascript สร้างความประหลาดใจในบางครั้ง
RBT

ขนาดของคืออะไรArray(10000)ด้วยempty x 10000?
Qwerty

1
ความยาวคือ 10,000 คุณสามารถตรวจสอบได้โดย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

44

เราใช้Array.from({length: 500})ตั้งแต่ปี 2017


@ gion_13: ฉันเห็นว่ามันได้รับการโหวตและฉันถูกโหวตลง เหตุผล?
7vujy0f0hy

@ 7vujy0f0 ทำไมฉันไม่รู้ว่าทำไมคุณถึงโหวตลง ฉันให้คะแนนคุณถึงแม้ว่าโซลูชันของคุณจะใช้งานง่ายน้อยกว่าวิธีนี้เล็กน้อย
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
สู่อนาคต!
Levi

สนุกสนานนี้ (และคล้ายกัน) คือ 50% (() => { let n = []; for(var i=0;i<500;i++){y.push("");} return n; })()ช้ากว่าเพียงแค่
Alex

นั่นทำให้เกิดการเพิ่มประสิทธิภาพก่อนกำหนดบางทีถ้าคุณตั้งใจจะสร้างอาร์เรย์จำนวนมากที่มีองค์ประกอบหลายสิบล้านชิ้นคุณอาจต้องการพิจารณา แต่ไม่กี่นาโนวินาทีในกรณีส่วนใหญ่จะไม่คุ้มค่ากับความสามารถในการอ่าน .
JaredMcAteer

10

ณ ES5 (เมื่อได้รับคำตอบนี้):

หากคุณต้องการอาร์เรย์ของundefinedองค์ประกอบที่ว่างเปล่าคุณสามารถทำได้

var whatever = new Array(5);

สิ่งนี้จะให้คุณ

[undefined, undefined, undefined, undefined, undefined]

แล้วถ้าคุณต้องการให้มันเต็มไปด้วยสตริงว่างคุณสามารถทำได้

whatever.fill('');

ซึ่งจะให้คุณ

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

และถ้าคุณต้องการทำในบรรทัดเดียว:

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

2
อาร์เรย์ใหม่ (2) ไม่ได้ให้ [ไม่ระบุไม่ได้กำหนด] มันให้อาร์เรย์ที่ไม่สามารถทำซ้ำได้
JCF

ตกลง. มีบางอย่างเกิดขึ้นอีกที่ฉันไม่เข้าใจ ฉันสร้างอาร์เรย์ใหม่ที่มีnew Array(2)และสิ่งที่ฉันได้รับกลับมาคือไม่ได้[ <2 empty items> ] [undefined, undefined]การใช้.mapในอดีตไม่มีผลใด ๆ อย่างไรก็ตามฉันสามารถทำซ้ำได้โดยใช้การfor...ofวนซ้ำ ถ้าฉันสร้างอาร์เรย์ใหม่โดยใช้สัญกรณ์ตัวอักษรa = [undefined, undefined]ฉันก็สามารถใช้.mapมันได้
JCF

1
@JCF สำหรับ ... ของโปรโตคอล iterator ที่ใช้ดังนั้นจึงทำงานแตกต่างจาก forEach / map Iterators หลวมข้อมูลความว่างเปล่า
Tomasz Błachut

@ 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

คุณสามารถใช้จาวาสคริปต์ทั้งสองวิธีทำซ้ำ () และแยก () ร่วมกัน

" ".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>

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.