如何在 JavaScript 中将对象(例如字符串或数字)附加到数组?
如何将某些内容附加到数组?
使用该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]);
}
更新
如果要将一个数组的项添加到另一个数组,可以使用firstArray.concat(secondArray)
:
var arr = [
"apple",
"banana",
"cherry"
];
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 arr = [
"Hi",
"Hello",
"Bonjour",
];
const newArr = [
...arr,
"Salut",
];
console.log(newArr);
如果你只附加一个变量,那么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 参考中有很多很好的信息。
一些快速基准测试(每个测试 = 500k 个附加元素,结果是多次运行的平均值)显示如下:
火狐 3.6 (Mac):
- 小阵列:
arr[arr.length] = b
更快(300ms vs. 800ms) - 大型阵列:
arr.push(b)
更快(500 毫秒与 900 毫秒)
Safari 5.0 (Mac):
- 小阵列:
arr[arr.length] = b
更快(90 毫秒与 115 毫秒) - 大型阵列:
arr[arr.length] = b
更快(160 毫秒与 185 毫秒)
谷歌浏览器 6.0(苹果机):
- 小数组:没有显着差异(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;
}
}
我认为值得一提的是,可以使用多个参数调用 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 年更新:使用spread,您不再需要它apply
,例如:
var arr = ['first'];
arr.push('second', 'third');
arr.push(...['fourth', 'fifth']);
console.log(arr) ;
您可以使用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
循环来复制数组中的每一项要简单得多。