开发者问题收集

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

2008-12-09
5349057

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

3个回答

使用 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 语法的另一种方法是返回一个带有 spread 语法 。这不会改变原始数组,但会返回一个新数组,其中会追加或添加新项,这符合函数式编程的精神。

const arr = [
  "Hi",
  "Hello",
  "Bonjour",
];

const newArr1 = [
  ...arr,
  "Salut",
];
const newArr2 = [
  "Salut",
  ...arr,
];

console.log(newArr1, newArr2);
2008-12-09

如果您只附加一个变量,那么 push() 就可以了。如果您需要附加另一个数组,请使用 concat()

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

var ar3 = ar1.concat(ar2);

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

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

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

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

JavaScript 参考 上有很多很棒的信息。

2008-12-09

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

Firefox 3.6(Mac):

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

Safari 5.0(Mac):

  • 小数组: arr[arr.length] = b 更快 (90ms vs. 115ms)
  • 大数组: arr[arr.length] = b 更快 (160ms vs. 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;
    }
}
2010-09-29