網站搜尋

javascript - 如何將某個東西附加到陣列中?


如何在 JavaScript 中將一個物件(例如字串或數字)附加到陣列中?

答案#1

使用 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]);
}

請注意,push() 方法會返回陣列更新後的長度。


更新

如果你想將一個陣列的項目加入到另一個陣列中,你可以使用 firstArray.concat(secondArray) :

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

// Do not forget to assign the result as, unlike push, concat does not change the existing array
arr = arr.concat([
  "dragonfruit",
  "elderberry",
  "fig"
]);

console.log(arr);

更新

如果你想在陣列的開始(即第一個索引)添加任何值,只要對這個答案做一個補充,你可以使用 Array.prototype.unshift 來達到這個目的。

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

它也支援一次附加多個值,就像 push 一樣。


更新

另一種使用 ES6 語法的方法是使用 擴展運算符 返回一個新陣列。這樣可以保持原始陣列不變,但返回一個附加或前置了新元素的新陣列,符合函數式編程的精神。

const arr1 = [
  "Hi",
  "Hello",
  "Bonjour",
];
const arr2 = [
  "Ciao",
  "Hej",
  "Merhaba",
];

const newArr1 = [
  ...arr1,
  "Salut",
];
const newArr2 = [
  "Salut",
  ...arr2,
];
const newArr3 = [
  ...arr1,
  ...arr2,
];

console.log(newArr1, newArr2, newArr3);

答案#2

如果你只是在附加單個變量,那麼 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);

在 JavaScript 參考 上有很多很棒的資訊。

答案#3

一些快速的基準測試(每次測試=添加 50 萬個元素,結果是多次運行的平均值)顯示如下:

Firefox 3.6(Mac):

  • 小陣列:arr[arr.length]=b 較快(300毫秒對比800毫秒)
  • 大型陣列:arr.push(b) 較快(500 毫秒 vs. 900 毫秒)

Safari 5.0(Mac):

  • 小陣列:arr[arr.length]=b 較快 (90ms 對 115ms)
  • 大型陣列:arr[arr.length]=b 較快 (160ms 對 185ms)

Google Chrome 6.0(Mac):

  • 小型陣列:沒有顯著差異(而且 Chrome 非常快!僅約 38 毫秒 !!)
  • 大型陣列:沒有顯著差異(160毫秒)

我比較喜歡 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;
    }
}

答案#4

我認為值得一提的是,push 可以用多個參數來調用,這些參數將按順序附加到陣列中。例如:

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 提供了更多關於 push 和 apply 具體作用的資訊。

2016 更新:有了展開運算符,你不再需要那個 apply,像這樣:

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

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

答案#5

你可以使用 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 迴圈來複製陣列中的每一個元素簡單得多。

答案#6

使用新的 ES6 擴展運算子,使用 push 連接兩個陣列變得更加容易:

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

這會將 arr2 的內容加入到 arr 的末尾。

Babel REPL 範例

答案#7

如果 arr 是一個陣列,而 val 是你希望添加的值,使用:

arr.push(val);

例如

var arr = ['a', 'b', 'c'];
arr.push('d');
console.log(arr);

答案#8

使用 concat:

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

答案#9

使用符合 ECMAScript 5 (ES5) 標準的 JavaScript,現在大多數瀏覽器都支援,你可以使用 apply() 將 array1 附加到 array2。

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

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

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

使用受 Chrome、Firefox、Internet Explorer 和 Edge 支援的 ECMAScript 6 (ES6) 標準的 JavaScript,您可以使用 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]

展開運算子(...)用於展開集合中的所有項目。

答案#10

如果你想要附加兩個陣列 -

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

那你可以使用:

var c = a.concat(b);

如果你想將記錄 g 添加到陣列 (var a=[]),你可以使用:

a.push('g');

答案#11

在 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"]

答案#12

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

答案#13

現在,你可以利用 ES6 語法直接做到

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

保持原始陣列不可變。

答案#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

答案#15

如果你使用的是 ES6,你可以使用展開運算子來做到這一點。

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

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

arr.push(...arr2);

答案#16

如果你知道最高索引(例如存儲在變數「i」中),那麼你可以做

myArray[i + 1] = someValue;

然而,如果你不知道的話,你可以使用

myArray.push(someValue);

如其他答案所建議的,或者你也可以使用

myArray[myArray.length] = someValue;

請注意,陣列是從零開始計算的,因此 .length 會回傳最大索引值加一。

還要注意,你不必按順序添加,實際上你也可以跳過某些值,例如

myArray[myArray.length + 1000] = someValue;

在這種情況下,介於之間的值將具有 未定義 的值。

因此,在迴圈中遍歷 JavaScript 時,確認某個值在該點實際存在是一個良好的做法。

這可以通過如下方式來完成:

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

如果你確定陣列中沒有任何零,那麼你可以直接這麼做:

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

當然,在這種情況下,請確保不要將條件設定為 myArray[i](如一些網路上的人建議的,因為一旦 i 大於最大索引,它將返回 undefined,而 undefined 會被評估為 false)。

答案#17

你可以使用 JavaScript 展開運算子語法來做到這一點:

// Initialize the array

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

// Append a new value to the array

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

// Or you can add a variable value

var testValue = "Cool";

arr = [...arr, testValue ];

console.log(arr);

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

答案#18

concat() 當然也可以用於二維陣列。無需迴圈。

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

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

b = b.concat(a);

alert(b[2][1]); // Result: 2

答案#19

只是想添加一個片段,用於非破壞性地添加一個元素。

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

答案#20

讓陣列的長度屬性來完成工作:

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

myarray.length 會回傳陣列中字串的數量。JavaScript 是從零開始計數的,因此陣列的下一個元素鍵將是陣列目前的長度。

範例:

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