协慌网

登录 贡献 社区

如何将某些内容附加到数组中?

如何在 JavaScript 中将对象(如字符串或数字)附加到数组中?

答案

使用push()函数追加到数组:

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

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

console.log(arr);

会打印

["Hi", "Hello", "Bonjour", "Hola"]

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

会打印

Hi
Hello
Bonjour
Hola 
Salut
Hey

更新

如果要将一个数组的项添加到另一个数组,可以使用firstArray.concat(secondArray)

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

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

console.log(arr);

会打印

["apple", "banana", "cherry", "dragonfruit", "elderberry", "fig"]

如果你只是附加一个变量,那么push()可以正常工作。如果需要追加另一个数组,请使用concat()

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

var ar3 = ar1.concat(ar2);

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

吐出来的:

"1,2,3"
"4,5,6"
"1,2,3,4,5,6"

除非重新分配,否则 concat 不会影响ar1ar2 ,例如:

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

将显示:

"1,2,3,4,5,6"

这里有很多很棒的信息

一些快速基准测试(每个测试 = 500k 附加元素,结果是多次运行的平均值)显示如下:

Firefox 3.6(Mac):

  • 小数组: arr[arr.length] = b更快 (300ms vs. 800ms)
  • 大型阵列: arr.push(b)更快 (500ms 与 900ms)

Safari 5.0(Mac):

  • 小数组: arr[arr.length] = b更快 (90ms vs 115ms)
  • 大数组: arr[arr.length] = b更快 (160ms vs. 185ms)

谷歌 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;
    }
}