วิธีการต่อท้ายสิ่งที่อาร์เรย์?


2893

ฉันจะผนวกวัตถุ (เช่นสตริงหรือตัวเลข) ลงในอาร์เรย์ใน JavaScript ได้อย่างไร

คำตอบ:


4386

ใช้Array.prototype.pushวิธีการต่อท้ายค่าในอาร์เรย์:

// initialize array
var arr = [
  "Hi",
  "Hello",
  "Bonjour"
];

// append new value to the array
arr.push("Hola");

console.log(arr);


คุณสามารถใช้push()ฟังก์ชันเพื่อผนวกค่ามากกว่าหนึ่งค่าเข้ากับอาร์เรย์ในการโทรครั้งเดียว:

// initialize array
var arr = ["Hi", "Hello", "Bonjour", "Hola"];

// append multiple values to the array
arr.push("Salut", "Hey");

// display all values
for (var i = 0; i < arr.length; i++) {
  console.log(arr[i]);
}


ปรับปรุง

หากคุณต้องการเพิ่มรายการของอาร์เรย์หนึ่งไปยังอาร์เรย์อื่นคุณสามารถใช้firstArray.concat(secondArray):

var arr = [
  "apple",
  "banana",
  "cherry"
];

arr = arr.concat([
  "dragonfruit",
  "elderberry",
  "fig"
]);

console.log(arr);

ปรับปรุง

นอกเหนือจากคำตอบนี้หากคุณต้องการผนวกค่าใด ๆ กับจุดเริ่มต้นของอาร์เรย์ที่หมายถึงดัชนีแรกจากนั้นคุณสามารถใช้Array.prototype.unshiftเพื่อจุดประสงค์นี้

var arr = [1, 2, 3];
arr.unshift(0);
console.log(arr);

นอกจากนี้ยังรองรับการผนวกค่าหลายค่าพร้อมกันได้เช่นpushกัน


131
โปรดสังเกตว่าค่าส่งคืนของ. push ไม่ใช่อาร์เรย์ (หรืออันใหม่เช่น. catcat) แต่เป็นจำนวนเต็มแทนความยาวใหม่ของอาร์เรย์
Jay

8
@RST: ไม่ใช้forเลย (ใช้.forEach)
Robert Siemer

34
ฉันจะบอกว่ารหัสเดิมไม่เป็นไร ไม่จำเป็นต้องมีสิ่งใดเพื่อเพิ่มประสิทธิภาพการเข้าถึงlengthทรัพย์สิน ล่ามทำงานได้อย่างยอดเยี่ยมในตัวมันเองและมันจะไม่สร้างความแตกต่างใด ๆ ในโลกแห่งความจริงไม่ว่าคุณจะปรับมันให้เหมาะสมหรือไม่ก็ตาม ถ้าอาเรย์ของคุณมีขนาดใหญ่มากซึ่งการปรับให้เหมาะสม.lengthจะช่วยได้จริงอาเรย์ส่วนใหญ่อาจไม่ใช่โครงสร้างข้อมูลที่เหมาะสมอีกต่อไป การใช้forEachมันมีข้อดี แต่ก็เป็นที่น่าสงสัยอย่างมากว่าประสิทธิภาพที่เพิ่มขึ้นจะเป็นหนึ่งในนั้นเพราะฟังก์ชั่นการเรียกใช้สำหรับการทำซ้ำแต่ละครั้งต้องเสียค่าใช้จ่ายและไม่ต้องเสียอะไรเลย
Stijn de Witt

29
@RobertSiemer lengthคุณสมบัติของอาร์เรย์ไม่ถูกคำนวณทุกครั้งที่คุณเรียกมันเป็นตัวแปรที่เก็บไว้ในarrayวัตถุซึ่งจะได้รับการปรับปรุงเฉพาะเมื่อคุณเปลี่ยนอาร์เรย์ ดังนั้นในความเป็นจริงจึงไม่มีค่าใช้จ่ายในการปฏิบัติรวมถึงarr.lengthในforเงื่อนไข
mikeyq6

7
@ โมจิมิในฐานะผู้เริ่มต้นไม่ต้องสนใจคำแนะนำใด ๆ ที่เกี่ยวกับคำถามเกี่ยวกับประสิทธิภาพในกรณีที่เป็นขอบเช่นนี้ ใช้ไวยากรณ์ที่แสดงออกมากขึ้น เมื่อเวลาผ่านไปรันไทม์ของ Javascript จะเพิ่มประสิทธิภาพให้มากขึ้น - พวกมันจะอินไลน์forEachฟังก์ชั่นการโทรกลับ (บางคนก็ทำไปแล้ว) และจะไม่มีความแตกต่างในรหัสเครื่องที่สร้างขึ้นหากฟังก์ชั่นถูกเรียกบ่อย ๆ รันไทม์ คำแนะนำแบบเดียวกันนี้สำหรับภาษาใด ๆ ที่ไม่ใช่แอสเซมเบลอร์
Mörre

1041

หากคุณต่อท้ายตัวแปรเดียวเท่านั้นก็ใช้push()งานได้ดี หากคุณต้องการผนวกอาร์เรย์อื่นให้ใช้concat():

var ar1 = [1, 2, 3];
var ar2 = [4, 5, 6];

var ar3 = ar1.concat(ar2);

alert(ar1);
alert(ar2);
alert(ar3);

Concat จะไม่ส่งผลกระทบใด ๆar1และar2นอกจากจะถูกกำหนดใหม่เช่น:

var ar1 = [1, 2, 3];
var ar2 = [4, 5, 6];

ar1 = ar1.concat(ar2);
alert(ar1);

จำนวนของข้อมูลที่ดีที่นี่


163
แค่ทำให้แน่ใจว่าคนจับ var ar3 = ar1.concat (ar2); ส่วนหนึ่ง ar1.concat (ar2) ไม่ได้บันทึกค่าลงใน ar1 คุณต้องจับมันโดยกำหนดให้ ar3 หรือกลับไปที่ ar1 เช่น: ar1 = ar1.concat (ar2);
vbullinger

31
ฉันจะบอกว่านี่เป็นคำตอบที่ผิดจริง คำถามคือHow do I append to an array in JavaScript?แต่concatจริงสร้างใหม่อาร์เรย์ นั่นคือความแตกต่างที่สำคัญ! แต่ฉันจะบอกว่าคำตอบด้านล่างโดย Omnimike นั้นเป็นคำตอบที่ดีที่สุด: ใช้Push.applyเพื่อส่งอาร์เรย์ทั้งหมดไปยังอาร์เรย์ที่มีอยู่โดยไม่ต้องสร้างใหม่
Stijn de Witt

@StijndeWitt คุณยังสามารถต่อท้ายได้โดยไม่ต้องสร้างอาร์เรย์ใหม่ดังที่ระบุไว้ในความคิดเห็นก่อนหน้านี้ar1 = ar1.concat(ar2);จะผนวกเข้ากับar1
cameronjonesweb

2
@cameronjonesweb ที่จริงแล้วสิ่งที่มันทำคือสร้างอาร์เรย์ใหม่ที่มีเนื้อหาเดียวกันกับar1ผนวกar2แล้วส่งคืนอาร์เรย์ใหม่ เพียงแค่ออกจากส่วนที่ได้รับมอบหมาย ( ar1 = ...) จากบรรทัดของรหัสนั้นและคุณจะเห็นว่าต้นฉบับ ar1ไม่ได้เปลี่ยนในความเป็นจริง pushหากคุณต้องการที่จะหลีกเลี่ยงการทำสำเนาคุณจะต้อง ไม่เชื่อฉันเชื่อว่าเอกสารที่: "concat () วิธีการส่งกลับอาร์เรย์ใหม่" concatประโยคแรกในเอกสารสำหรับ
Stijn de Witt

@StijndeWitt คุณพูดถูก แต่วิธีที่แตกต่างในการดูแม้ว่า. พุชทำงานได้ดีในการเพิ่มตัวแปร / วัตถุเดียว แต่จะสับสนเมื่อมันมาถึงการต่อท้ายอาร์เรย์ซึ่งar2ข้างต้นเป็นอย่างไรก็ตาม ผลมาจากในสถานการณ์ที่จะ.push = [ar1, [ar2]].concat แก้ปัญหานั้นได้ แต่ด้วยการเสียสละของความเร็วและอาร์เรย์ใหม่ที่สร้างขึ้น ในการใช้.pushอย่างถูกต้องในการผนวกอาร์เรย์ให้วนออกองค์ประกอบที่มีอยู่ก่อนแล้วกดแต่ละรายการ ar2.forEach(each => { ar1.push(each); });
Ade

408

การเปรียบเทียบอย่างรวดเร็วบางอย่าง (แต่ละการทดสอบ = 500k องค์ประกอบต่อท้ายและผลลัพธ์เป็นค่าเฉลี่ยของการวิ่งหลายครั้ง) แสดงให้เห็นดังต่อไปนี้:

Firefox 3.6 (Mac):

  • อาร์เรย์ขนาดเล็ก: arr[arr.length] = bเร็วกว่า (300ms เทียบกับ 800ms)
  • อาร์เรย์ขนาดใหญ่: arr.push(b)เร็วกว่า (500ms เทียบกับ 900 มิลลิวินาที)

Safari 5.0 (Mac):

  • อาร์เรย์ขนาดเล็ก: arr[arr.length] = bเร็วกว่า (90ms เทียบกับ 115ms)
  • อาร์เรย์ขนาดใหญ่: arr[arr.length] = bเร็วกว่า (160ms เทียบกับ 185ms)

Google Chrome 6.0 (Mac):

  • อาร์เรย์ขนาดเล็ก: ไม่มีความแตกต่างอย่างมีนัยสำคัญ (และ Chrome เร็วมาก! ~ 38ms เท่านั้น !!)
  • อาร์เรย์ขนาดใหญ่: ไม่มีความแตกต่างอย่างมีนัยสำคัญ (160ms)

ฉันชอบarr.push()ไวยากรณ์ที่ดีกว่า แต่ฉันคิดว่าฉันควรใช้arr[arr.length]เวอร์ชันอย่างน้อยที่สุดในความเร็วแบบดิบ ฉันชอบที่จะเห็นผลลัพธ์ของการทำงานของ IE แม้ว่า


ลูปการเปรียบเทียบของฉัน:

function arrpush_small() {
    var arr1 = [];
    for (a = 0; a < 100; a++)
    {
        arr1 = [];
        for (i = 0; i < 5000; i++)
        {
            arr1.push('elem' + i);
        }
    }
}

function arrlen_small() {
    var arr2 = [];
    for (b = 0; b < 100; b++)
    {
        arr2 = [];
        for (j = 0; j < 5000; j++)
        {
            arr2[arr2.length] = 'elem' + j;
        }
    }
}


function arrpush_large() {
    var arr1 = [];
    for (i = 0; i < 500000; i++)
    {
        arr1.push('elem' + i);
    }
}

function arrlen_large() {
    var arr2 = [];
    for (j = 0; j < 500000; j++)
    {
        arr2[arr2.length] = 'elem' + j;
    }
}

9
คำถามคือถ้า. ความยาวเป็นค่าที่เก็บไว้หรือถูกคำนวณเมื่อมีการเข้าถึงเนื่องจากถ้าอันหลังเป็นจริงมันอาจเป็นไปได้ว่าการใช้ตัวแปรอย่างง่าย (เช่น j) เนื่องจากค่าดัชนีอาจเร็วขึ้น
yoel halb

4
ชอบที่จะเห็น concat () ในการทดสอบเดียวกัน!
Justin

2
ฉันสงสัยว่าสิ่งนี้มีการเปลี่ยนแปลงในช่วงสี่ปีที่ผ่านมา (jsperf จะเป็นประโยชน์ตอนนี้)
พอลเดรเปอร์

8
การเปรียบเทียบประเภทนี้น่าสนใจ แต่ไม่ได้มีประโยชน์มากในการทำให้แอปเร็วขึ้น ลูปการเรนเดอร์มีราคาแพงกว่ามากในรอบใด ๆ นอกจากนี้ internals ของภาษา JS นั้นยังได้รับการปรับให้เหมาะสมโดยนักพัฒนาเบราว์เซอร์ นั่นคือเหตุผลสำหรับ downvote ของฉันไม่ใช่ความน่าสนใจของคำตอบนี้ หากคุณต้องการแอปที่เร็วกว่าให้ทำเกณฑ์มาตรฐานก่อนแล้วดูว่าจะเปลี่ยนอะไร - 99 จาก 100 ครั้งจะไม่มีปัญหาเหมือนกับที่การทดสอบนี้แสดง บ่อยครั้งที่นักพัฒนาซอฟต์แวร์ JS / CSS ที่ไม่ดี - ไม่ใช่ internals ของเบราว์เซอร์ที่ทำให้ช้า
LessQuesar

7
ฉันเห็นด้วยกับ LessQuesar ในการเกาะติดกับบิวด์อินทุกครั้งที่ทำได้ ไม่ใช่การเพิ่มประสิทธิภาพขนาดเล็กนั้นไม่ดีในตัวเอง แต่เขาก็ถูกต้องที่เบราว์เซอร์มักจะปรับปรุงความเร็วเครื่องยนต์ของพวกเขาอยู่เสมอ ตัวอย่างตรงประเด็น: จากการเขียนนี้ประสิทธิภาพต่อเบราว์เซอร์เกือบจะเหมือนกันสำหรับเทคนิคทั้งหมดที่กล่าวมาข้างต้น เมื่อสองสามปีที่แล้วมีความหมายที่น่าประหลาดใจมากสำหรับผลตอบแทนเล็ก ๆ น้อย ๆ เมื่อตอนนี้ไม่มีกำไร
Beejor

297

ฉันคิดว่ามันคุ้มค่าที่จะพูดถึงว่าการกดสามารถถูกเรียกได้โดยมีอาร์กิวเมนต์หลายตัวซึ่งจะผนวกเข้ากับอาร์เรย์ตามลำดับ ตัวอย่างเช่น:

var arr = ['first'];
arr.push('second', 'third');
console.log(arr);

ด้วยเหตุนี้คุณสามารถใช้ push.apply เพื่อผนวกอาร์เรย์ไปยังอาร์เรย์อื่นดังนี้:

var arr = ['first'];
arr.push('second', 'third');
arr.push.apply(arr, ['forth', 'fifth']);
console.log(arr);

ข้อเขียน ES5มีข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่ผลักดันและนำไปใช้ทำ

การอัปเดต 2016: ด้วยสเปรดคุณไม่จำเป็นต้องใช้applyอีกต่อไปเช่น:

var arr = ['first'];
arr.push('second', 'third');

arr.push(...['fourth', 'fifth']);
console.log(arr) ;


25
คำตอบที่ดีที่สุดสำหรับการต่อท้ายอาร์เรย์ของรายการในขณะที่ไม่ได้สร้างอาร์เรย์ใหม่
Gabriel Littman

1
@GabrielLittman เป็นพิเศษเพราะการผนวกไปยังอาร์เรย์ IMHO ควรแก้ไขอาร์เรย์ไม่ใช่สร้างใหม่
Juan Mendes

3
ผมชอบรุ่น push.apply ค่อนข้างจะใช้Array.prototype.push.apply()แต่
ไมเคิล

1
บางครั้งเป็นสิ่งสำคัญที่จะต้องรักษาการอ้างอิงไปยังอาร์เรย์ตัวอย่างเช่นใน AngularJs เมื่ออาร์เรย์อยู่ในขอบเขตของคอนโทรลเลอร์บางตัวและบริการบางอย่างจำเป็นต้องอัปเดตข้อมูลในอาร์เรย์เพื่อแสดง นั่นเป็นเหตุผลที่ฉัน upvoting โซลูชันนี้
ดูคมชัด

คำตอบนี้ควรจะสูงขึ้นจริงๆ
ความผิดปกติ

80

คุณสามารถใช้pushและapplyฟังก์ชั่นเพื่อผนวกสองอาร์เรย์

var array1 = [11, 32, 75];
var array2 = [99, 67, 34];

Array.prototype.push.apply(array1, array2);
console.log(array1);

มันจะผนวกการarray2 array1ตอนนี้มีarray1 [11, 32, 75, 99, 67, 34]รหัสนี้ง่ายกว่าการเขียนforลูปเพื่อคัดลอกแต่ละรายการในอาเรย์


นี่คือสิ่งที่ฉันต้องการรักษาข้อมูลอ้างอิงอาร์เรย์ดั้งเดิม
amit bakle

หากคุณใช้ ES6 / 7 คุณสามารถใช้...โอเปอเรเตอร์แทนการใช้ const a1 = [] const a2 = [5,6,7] const.push(...a2) แก้ไข: เน้นไวยากรณ์
Mieszko

ฉันจะใช้array1.concat(array2)ในสถานการณ์นี้ เรียกร้องให้pushดูเหมือนว่าไม่จำเป็น
connectyourcharger

56

ด้วยโอเปอเรเตอร์ ES6 ใหม่การเข้าร่วมสองอาร์เรย์โดยใช้pushจะง่ายยิ่งขึ้น:

var arr = [1, 2, 3, 4, 5];
var arr2 = [6, 7, 8, 9, 10];
arr.push(...arr2);
console.log(arr);

นี้จะเพิ่มเนื้อหาของบนจุดสิ้นสุดของarr2arr

Babel REPL ตัวอย่าง




34

Javascript กับECMAScript 5มาตรฐานซึ่งสนับสนุนโดยเบราว์เซอร์ส่วนใหญ่ตอนนี้คุณสามารถใช้apply()เพื่อผนวกไปarray1array2

var array1 = [3, 4, 5];
var array2 = [1, 2];

Array.prototype.push.apply(array2, array1);

console.log(array2); // [1, 2, 3, 4, 5]

Javascript ที่มีมาตรฐานECMAScript 6ซึ่งรองรับโดย Chrome และ FF และ IE Edge คุณสามารถใช้spreadโอเปอเรเตอร์ได้:

"use strict";
let array1 = [3, 4, 5];
let array2 = [1, 2];

array2.push(...array1);

console.log(array2); // [1, 2, 3, 4, 5]

spreadผู้ประกอบการจะเข้ามาแทนที่array2.push(...array1);ด้วยarray2.push(3, 4, 5);เมื่อเบราว์เซอร์ที่เป็นความคิดตรรกะ

คะแนนโบนัส

หากคุณต้องการสร้างตัวแปรอื่นเพื่อเก็บรายการทั้งหมดจากทั้งสองอาร์เรย์คุณสามารถทำได้:

ES5 var combinedArray = array1.concat(array2);

ES6 const combinedArray = [...array1, ...array2]

ผู้ดำเนินการแพร่กระจาย ( ...) คือการกระจายรายการทั้งหมดจากคอลเลกชัน


30

หากคุณต้องการผนวกสองอาร์เรย์ -

var a = ['a', 'b'];
var b = ['c', 'd'];

จากนั้นคุณสามารถใช้:

var c = a.concat(b);

และถ้าคุณต้องการเพิ่มการบันทึกgไปยังอาร์เรย์ ( var a=[]) จากนั้นคุณสามารถใช้:

a.push('g');

25

push()วิธีการเพิ่มรายการใหม่ไปยังจุดสิ้นสุดของอาร์เรย์และผลตอบแทนความยาวใหม่ ตัวอย่าง:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.push("Kiwi");

// The result of fruits will be:
Banana, Orange, Apple, Mango, Kiwi

คำตอบที่แน่นอนสำหรับคำถามของคุณได้รับคำตอบแล้ว แต่ลองมาดูวิธีอื่นในการเพิ่มรายการในอาร์เรย์

unshift()วิธีการเพิ่มรายการใหม่ที่จุดเริ่มต้นของอาร์เรย์และผลตอบแทนความยาวใหม่ ตัวอย่าง:

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.unshift("Lemon", "Pineapple");

// The result of fruits will be:
Lemon, Pineapple, Banana, Orange, Apple, Mango

และสุดท้ายใช้concat()วิธีนี้เพื่อเข้าร่วมสองอาร์เรย์หรือมากกว่า ตัวอย่าง:

var fruits = ["Banana", "Orange"];
var moreFruits = ["Apple", "Mango", "Lemon"];
var allFruits = fruits.concat(moreFruits);

// The values of the children array will be:
Banana, Orange, Apple, Mango, Lemon

25

มีสองวิธีในการต่อท้ายอาร์เรย์ใน JavaScript:

1)push()วิธีการเพิ่มองค์ประกอบหนึ่งหรือถึงจุดสิ้นสุดของอาร์เรย์และส่งกลับความยาวใหม่ของอาร์เรย์

var a = [1, 2, 3];
a.push(4, 5);
console.log(a);

เอาท์พุท:

[1, 2, 3, 4, 5]

2)unshift()วิธีการเพิ่มองค์ประกอบหนึ่งหรือจุดเริ่มต้นของอาร์เรย์และส่งกลับความยาวใหม่ของอาร์เรย์:

var a = [1, 2, 3];
a.unshift(4, 5);
console.log(a); 

เอาท์พุท:

[4, 5, 1, 2, 3]

3)concat()วิธีการที่ใช้ในการผสานสองหรือมากกว่าอาร์เรย์ วิธีนี้จะไม่เปลี่ยนอาร์เรย์ที่มีอยู่ แต่จะส่งกลับอาร์เรย์ใหม่แทน

var arr1 = ["a", "b", "c"];
var arr2 = ["d", "e", "f"];
var arr3 = arr1.concat(arr2);
console.log(arr3);

เอาท์พุท:

[ "a", "b", "c", "d", "e", "f" ]

4)คุณสามารถใช้.lengthคุณสมบัติของอาร์เรย์เพื่อเพิ่มองค์ประกอบไปยังจุดสิ้นสุดของอาร์เรย์:

var ar = ['one', 'two', 'three'];
ar[ar.length] = 'four';
console.log( ar ); 

เอาท์พุท:

 ["one", "two", "three", "four"]

5)splice()วิธีการเปลี่ยนแปลงเนื้อหาของอาร์เรย์โดยการเอาองค์ประกอบที่มีอยู่และ / หรือการเพิ่มองค์ประกอบใหม่:

var myFish = ["angel", "clown", "mandarin", "surgeon"];
myFish.splice(4, 0, "nemo");
//array.splice(start, deleteCount, item1, item2, ...)
console.log(myFish);

เอาท์พุท:

["angel", "clown", "mandarin", "surgeon","nemo"]

6)คุณยังสามารถเพิ่มองค์ประกอบใหม่ให้กับอาร์เรย์ได้ง่ายๆโดยการระบุดัชนีใหม่และกำหนดค่า:

var ar = ['one', 'two', 'three'];
ar[3] = 'four'; // add new element to ar
console.log(ar);

เอาท์พุท:

["one", "two","three","four"]

สำหรับ 1) สิ่งนี้บอกว่า "ไม่ต้องแก้ไขอาร์เรย์เดิม" แต่นั่นคือสิ่งที่pushทำจริงๆ: มันปรับเปลี่ยนอาเรย์ดั้งเดิมโดยการผลักองค์ประกอบใหม่เข้ามา ฉันอ่านผิดหรือควรแก้ไขได้ไหม
Phil Calvin

22

ตอนนี้คุณสามารถใช้ประโยชน์จากไวยากรณ์ ES6 และทำ:

let array = [1, 2];
console.log([...array, 3]);

ทำให้อาร์เรย์ดั้งเดิมไม่เปลี่ยนรูป


17

หากคุณรู้จักดัชนีสูงสุด (เช่นเก็บไว้ในตัวแปร "i") คุณสามารถทำได้

myArray[i + 1] = someValue;

อย่างไรก็ตามหากคุณไม่ทราบคุณสามารถใช้งานได้

myArray.push(someValue);

เป็นคำตอบอื่น ๆ ที่แนะนำหรือคุณสามารถใช้

myArray[myArray.length] = someValue; 

โปรดทราบว่าอาร์เรย์จะเป็นศูนย์ดังนั้นความยาวจะส่งกลับดัชนีสูงสุดบวกหนึ่ง

นอกจากนี้โปรดทราบว่าคุณไม่จำเป็นต้องเพิ่มตามลำดับและคุณสามารถข้ามค่าได้เช่นเดียวกับใน

myArray[myArray.length + 1000] = someValue;

ในกรณีนี้ค่าในระหว่างนั้นจะมีค่าไม่ได้กำหนด

ดังนั้นจึงเป็นแนวปฏิบัติที่ดีเมื่อวนลูปผ่าน JavaScript เพื่อตรวจสอบว่ามีค่าจริง ณ จุดนั้น

สิ่งนี้สามารถทำได้โดยสิ่งต่อไปนี้:

if(myArray[i] === "undefined"){ continue; }

หากคุณมั่นใจว่าคุณไม่มีเลขศูนย์ใด ๆ อยู่ในอาร์เรย์คุณสามารถทำได้ดังนี้

if(!myArray[i]){ continue; }

ตรวจสอบให้แน่ใจในกรณีนี้ว่าคุณไม่ได้ใช้เป็นเงื่อนไข myArray [i] (เนื่องจากบางคนบนอินเทอร์เน็ตแนะนำตามท้ายว่าทันทีที่ฉันมีค่ามากกว่าดัชนีสูงสุดจะส่งกลับไม่ได้กำหนดซึ่งประเมิน เท็จ)


คุณไม่ได้ตั้งใจ"undefined"จริงๆ มันจะต้องอ่านvoid 0! "undefined"เป็นสตริงและ"undefined" !== void 0ดังนั้นคุณif(myArray[i]เป็นเท็จเว้นแต่อาร์เรย์ที่ดัชนีมีการตั้งค่าสตริงที่มีเนื้อหาเทียบเท่าi 'u'+'n'+'d'+'e'+'f'+'i'+'n'+'e'+'d'นอกจากนี้ทราบว่าคุณไม่ควรใช้แทนการใช้งานundefined void 0เพราะvoid 0มักจะเป็นค่าที่ไม่ได้กำหนดในขณะที่undefinedสามารถกำหนดผ่านสิ่งที่ชอบfunction x(undefined) { alert(undefined) } x("hello world")ดังนั้นคุณไม่สามารถแน่ใจได้ว่ามีคนตั้งค่าwindow["undefined"]=1หรือคล้ายกันโดยไม่ตั้งใจ
Tino

14

ผนวกองค์ประกอบเดียว

//Append to the end
arrName.push('newName1');

//Prepend to the start
arrName.unshift('newName1');

//Insert at index 1
arrName.splice(1, 0,'newName1');
//1: index number, 0: number of element to remove, newName1: new element


// Replace index 3 (of exists), add new element otherwise.
arrName[3] = 'newName1';

ผนวกองค์ประกอบหลายรายการ

//Insert from index number 1
arrName.splice(1, 0,'newElemenet1', 'newElemenet2', 'newElemenet3');
//1: index number from where insert starts, 
//0: number of element to remove, 
//newElemenet1,2,3: new elements

ผนวกอาร์เรย์

//join two or more arrays
arrName.concat(newAry1, newAry2);
//newAry1,newAry2: Two different arrays which are to be combined (concatenated) to an existing array

1
ทำไมarrName.push('newElemenet1, newElemenet2, newElemenet3')ล่ะ
Mihail Malostanidis

1
ในการผลัก () มันแทรกองค์ประกอบในที่สุด แต่ในตัวอย่างของฉันมันแทรกองค์ประกอบที่อยู่ตรงกลางเช่นจากดัชนีอาร์เรย์ 1 (ตามตัวอย่าง) @Mihail Malostanidis
Srikrushna

โอ้ฉันคิดว่าข้อสันนิษฐานได้ว่าเป็นความยาวarrName 1
Mihail Malostanidis

11

concat()แน่นอนสามารถใช้กับอาร์เรย์ 2 มิติได้เช่นกัน ไม่จำเป็นต้องวนซ้ำ

var a = [[1, 2], [3, 4]];

var b = [["a", "b"], ["c", "d"]];

b = b.concat (a);

การแจ้งเตือน (ข [2] [1]); // ผลลัพธ์ 2


10

ปล่อยให้คุณสมบัติความยาวของอาร์เรย์ทำงาน:

myarray[myarray.length] = 'new element value added to the end of the array';

myarray.length ส่งคืนจำนวนสตริงในอาร์เรย์ JS เป็นศูนย์ดังนั้นองค์ประกอบคีย์ถัดไปของอาร์เรย์จะเป็นความยาวปัจจุบันของอาร์เรย์ EX:

var myarray = [0, 1, 2, 3],
    myarrayLength = myarray.length; //myarrayLength is set to 4

9

เพียงแค่ต้องการเพิ่มข้อมูลโค้ดสำหรับการเพิ่มองค์ประกอบแบบไม่ทำลาย

var newArr = oldArr.concat([newEl]);

8

ผนวกค่าเข้ากับอาร์เรย์

เนื่องจากArray.prototype.pushเพิ่มองค์ประกอบหนึ่งรายการขึ้นไปที่ส่วนท้ายของอาร์เรย์และคืนค่าความยาวของอาร์เรย์ใหม่บางครั้งเราต้องการเพียงแค่รับอาร์เรย์ใหม่ล่าสุดเพื่อให้เราสามารถทำสิ่งต่อไปนี้:

const arr = [1, 2, 3];
const val = 4;

arr.concat([val]); // [1, 2, 3, 4]

หรือเพียงแค่:

[...arr, val] // [1, 2, 3, 4]

2
แก้ไขด้วย ES6 สำหรับผู้ควบคุมเครื่อง
monikapatelIT

7

หากคุณกำลังใช้ ES6 คุณสามารถใช้ตัวดำเนินการสเปรดเพื่อทำ

var arr = [
    "apple",
    "banana",
    "cherry"
];

var arr2 = [
    "dragonfruit",
    "elderberry",
    "fig"
];

arr.push(...arr2);

7

คุณสามารถทำได้โดยใช้คุณลักษณะใหม่ของจาวาสคริปต์ Es 6:

// initialize array

var arr = [
    "Hi",
    "Hello",
    "Bangladesh"
];

// append new value to the array

arr= [...arr , "Feni"];

// or you can put a variable value

var testValue = "Cool";

arr = [...arr , testValue ];

console.log(arr); 

// final output  [ 'Hi', 'Hello', 'Bangladesh', 'Feni', 'Cool' ]

1
นี่ไม่ได้ผนวกค่าเข้ากับอาร์เรย์ซึ่งเป็นสิ่งที่ OP ถาม สิ่งนี้จะสร้างอาร์เรย์ใหม่ที่มีเนื้อหาของอาร์เรย์เก่าและองค์ประกอบใหม่ จริงๆนี่คือ Array.concat
Richard Matheson

5

หากคุณต้องการรวม 2 อาร์เรย์โดยไม่ซ้ำกันคุณสามารถลองใช้รหัสด้านล่าง

array_merge = function (arr1, arr2) {
  return arr1.concat(arr2.filter(function(item){
    return arr1.indexOf(item) < 0;
  }))
}

การใช้งาน:

array1 = ['1', '2', '3']
array2 = ['2', '3', '4', '5']
combined_array = array_merge(array1, array2)

ผลลัพธ์: [1,2,3,4,5]


5

ผนวกรายการเดียว

ในการผนวกรายการเดียวเข้ากับอาร์เรย์ให้ใช้push()วิธีการที่วัตถุ Array มีให้:

const fruits = ['banana', 'pear', 'apple']
fruits.push('mango')
console.log(fruits)

push() กลายพันธุ์อาร์เรย์เดิม

หากต้องการสร้างอาร์เรย์ใหม่แทนให้ใช้concat()วิธี Array:

const fruits = ['banana', 'pear', 'apple']
const allfruits = fruits.concat('mango')
console.log(allfruits)

โปรดสังเกตconcat()ว่าไม่ได้เพิ่มรายการลงในอาร์เรย์ แต่สร้างอาร์เรย์ใหม่ซึ่งคุณสามารถกำหนดให้กับตัวแปรอื่นหรือกำหนดให้กับอาร์เรย์เดิมอีกครั้ง (ประกาศเป็นอาร์เรย์letเนื่องจากคุณไม่สามารถกำหนดใหม่const):

const fruits = ['banana', 'pear', 'apple']
const allfruits = fruits.concat('mango')
console.log(allfruits)
let fruits = ['banana', 'pear', 'apple']
fruits = fruits.concat('mango')

ผนวกหลายรายการ

ในการผนวกหลายรายการเข้ากับอาร์เรย์คุณสามารถใช้push()โดยการเรียกมันด้วยอาร์กิวเมนต์หลายตัว:

const fruits = ['banana', 'pear', 'apple']
fruits.push('mango', 'melon', 'avocado')
console.log(fruits)

คุณยังสามารถใช้concat()วิธีที่คุณเห็นมาก่อนส่งผ่านรายการที่คั่นด้วยเครื่องหมายจุลภาค:

const fruits = ['banana', 'pear', 'apple']
const allfruits = fruits.concat('mango', 'melon', 'avocado')
console.log(allfruits)

หรืออาร์เรย์:

const fruits = ['banana', 'pear', 'apple']
const allfruits = fruits.concat(['mango', 'melon', 'avocado'])
console.log(allfruits)

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

โพสต์ครั้งแรกที่



4

หากคุณต้องการผนวกค่าเดียวลงในอาร์เรย์ให้ใช้วิธีการพุช มันจะเพิ่มองค์ประกอบใหม่ในตอนท้ายของอาร์เรย์

แต่ถ้าคุณต้องการเพิ่มองค์ประกอบหลายรายการให้เก็บองค์ประกอบไว้ในอาร์เรย์ใหม่และเชื่อมโยงอาร์เรย์ที่สองกับอาร์เรย์แรก ... ในแบบที่คุณต้องการ

arr=['a','b','c'];
arr.push('d');
//now print the array in console.log and it will contain 'a','b','c','d' as elements.
console.log(array);

2

เราไม่มีฟังก์ชั่นผนวกสำหรับ Array ใน javascript แต่เรามีpushและunshiftลองจินตนาการว่าคุณมี array ด้านล่าง:

var arr = [1, 2, 3, 4, 5];

และเราชอบผนวกค่าให้กับอาร์เรย์นี้เราสามารถทำได้ arr.push (6) และมันจะเพิ่ม 6 ต่อท้ายอาร์เรย์:

arr.push(6); // return [1, 2, 3, 4, 5, 6];

นอกจากนี้เรายังสามารถใช้ unshift ดูวิธีที่เราสามารถใช้สิ่งนี้:

arr.unshift(0); //return [0, 1, 2, 3, 4, 5];

เป็นฟังก์ชั่นหลักในการเพิ่มหรือเพิ่มค่าใหม่ในอาร์เรย์


1

คุณสามารถใช้วิธีการพุช

Array.prototype.append = function(destArray){
     destArray = destArray || [];
     this.push.call(this,...destArray);
     return this;
}
var arr = [1,2,5,67];
var arr1 = [7,4,7,8];
console.log(arr.append(arr1));// [7, 4, 7, 8, 1, 4, 5, 67, 7]
console.log(arr.append("Hola"))//[1, 2, 5, 67, 7, 4, 7, 8, "H", "o", "l", "a"]

0

push()เพิ่มองค์ประกอบใหม่ในตอนท้ายของอาร์เรย์
pop()เอาองค์ประกอบจากจุดสิ้นสุดของอาร์เรย์

ในการผนวกวัตถุ (เช่นสตริงหรือตัวเลข) เพื่อใช้อาร์เรย์ -
array.push(toAppend);


0

ต่อท้ายรายการในอาร์เรย์

let fruits =["orange","banana","apple","lemon"]; /*array declaration*/

fruits.push("avacado"); /* Adding an element to the array*/

/*displaying elements of the array*/

for(var i=0; i < fruits.length; i++){
  console.log(fruits[i]);
}

0

คุณสามารถใช้การกด () หากคุณต้องการเพิ่มค่าเช่น arr.push("Test1", "Test2");

หากคุณมีอาร์เรย์คุณสามารถใช้ concat () เช่น Array1.concat(Array2)

หากคุณมีองค์ประกอบเดียวที่จะเพิ่มคุณสามารถลองความยาว menthod เช่น array[aray.length] = 'test';

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