提问



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

最佳参考


使用push()功能追加到数组:[100]




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

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

console.log(arr);



如果你只是附加一个变量,那么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"


这里有很多很棒的信息[101]

其它参考1


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


Firefox 3.6(Mac):



  • 小阵列: arr[arr.length] = b更快(300ms vs. 800ms)

  • 大型阵列: arr.push(b)更快(500毫秒与900毫秒)



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

其它参考2


我认为值得一提的是,可以使用多个参数调用push,这些参数将按顺序附加到数组中。例如:


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


因此,您可以使用push.apply将数组附加到另​​一个数组,如下所示:


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


带注释的ES5有更多关于推送和应用的信息。[102] [103] [104]


2016年更新:随着传播,您不再需要apply,例如:[105]


arr.push(...['fourth', 'fifth']);
console.log(arr) // ['first', 'second', 'third', 'fourth', 'fifth']

其它参考3


您可以使用pushapply函数追加两个数组。


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

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


它将array2追加到array1。现在array1包含[11, 32, 75, 99, 67, 34]
此代码比编写for循环复制数组中的每个项目要简单得多。

其它参考4


使用concat:


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


a现在包含所有元素,[1, 2, 3, 3, 4, 5]


参考:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/concat [106]

其它参考5


如果arr是一个数组,并且val是您要添加的值,请使用:


arr.push(val);


例如。


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


将记录:


['a', 'b', 'c', 'd']

其它参考6


使用新的ES6扩展运算符,使用push连接两个数组变得更加容易:[107]


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


这将arr2的内容添加到arr的末尾。


Babel REPL示例[108]

其它参考7


如果你想追加两个数组 -


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


然后你可以使用:


var c = a.concat(b);


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


a.push('g');

其它参考8


现在大多数浏览器都支持 ECMAScript 5 标准的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]


具有 ECMAScript 6 标准且受Chrome和FF以及IE Edge支持的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(3, 4, 5);替换为array2.push(3, 4, 5);


加分点


如果您想创建另一个变量来存储两个数组中的所有项目,您可以这样做:


ES5 var combinedArray = array1.concat(array2);


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


点差运算符(...)用于展开集合中的所有项目。

其它参考9


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

其它参考10


有几种方法可以在JavaScript中附加数组:


1) push()方法将一个或多个元素添加到数组的末尾并返回数组的新长度。




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



如果您知道最高指数(例如存储在变量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]]作为条件(正如一些人在互联网上建议的那样,一旦我大于最高指数,它将返回undefined,其评估为假)

其它参考11


现在,您可以利用ES6语法并执行以下操作:




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



让数组长度属性完成工作:



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

其它参考12


concat()当然也可以用于二维阵列。不需要循环。



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

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

  
  b=b.concat(a);

  
  警报(B
var ar1 = [1, 2, 3];
var ar2 = [4, 5, 6];

var ar3 = ar1.concat(ar2);

alert(ar1);
alert(ar2);
alert(ar3);
// initialize array
var arr = [
    "Hi",
    "Hello",
    "Bonjour"
];

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

console.log(arr);
);//结果2


其它参考13



  只想添加一个片段,用于非破坏性添加元素。



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

其它参考14


你可以使用新的javascript 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' ]

其它参考15


如果你想组合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]]

其它参考16


如果您使用的是ES6,则可以使用扩展运算符来执行此操作。[109]


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

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

arr.push(...arr2);

其它参考17


如果要将单个值附加到数组中,只需使用push方法...
它将在数组末尾添加一个新元素。
但是,如果您打算添加多个元素,则将元素存储在新数组中
并用第一个数组连接第二个数组......你想要的任何一种方式。


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

其它参考18


你.push()那个值。
示例: array.push(value);

其它参考19


我们没有在javascript中为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];


它们是向数组添加或附加新值的主要功能。

其它参考20


你可以使用推送方法。


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

其它参考21


将值附加到数组



由于Array.prototype.push将一个或多个元素添加到数组的末尾,而返回数组的新长度,有时我们只想获取新的最新数组,以便我们可以做这样的事情:[110]


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

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


要不就:


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

其它参考22


使用方法push()将项目附加到数组。请参阅下面的示例。


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



push()在数组的末尾添加一个新元素
pop()从数组的末尾删除一个元素。


要将对象(例如字符串或数字)附加到数组,请使用 -

array.push(toAppend);

其它参考23


附加单个项目



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




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



附加单个元素


//Append at first
arrName.push('newName1');

//Append at last
arrName.unshift('newName1');

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


//Append at index 3
arrName[3] = 'newName1';


附加多个元素


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


追加数组


//join two or more array
arrName.concat(newAry1, newAry2);
//newAry1,newAry2: Two different array which is to be append to the existing array