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


当前回答

如果要附加两个数组-

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

那么您可以使用:

var c = a.concat(b);

如果您想将记录g添加到数组(var a=[]),那么可以使用:

a.push('g');

其他回答

使用凹面:

a=[1,2,3];b=[3,4,5];a=混凝土(b);控制台日志(a);

如果要组合两个数组而不重复,可以尝试以下代码:

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]

附加单个项目

要将单个项附加到数组,请使用array对象提供的push()方法:

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 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)

请记住,如前所述,此方法不会改变原始数组,但会返回一个新数组。

最初发布于

一些快速基准测试(每个测试=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比115ms)大型阵列:arr[arr.length]=b更快(160ms比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;
    }
}

如果您知道最高索引(例如存储在变量“i”中),那么您可以

myArray[i + 1] = someValue;

然而,如果你不知道,那么你可以使用

myArray.push(someValue);

如其他答案所示,或者您可以使用

myArray[myArray.length] = someValue;

注意,数组是从零开始的,因此.length返回最高索引加1。

还要注意,您不必按顺序添加,实际上可以跳过值,如

myArray[myArray.length + 1000] = someValue;

在这种情况下,介于两者之间的值将具有未定义的值。

因此,当在JavaScript中循环以验证某个值是否确实存在时,这是一个很好的做法。

这可以通过以下方式实现:

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

如果您确定数组中没有任何零,则可以执行以下操作:

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

当然,在这种情况下,请确保不要使用myArray[i]作为条件(正如互联网上的一些人根据结尾所建议的,一旦i大于最高索引,它将返回undefined,其结果为false)。