似乎没有办法用另一个数组来扩展一个现有的JavaScript数组,即模仿Python的extend方法。
我想达到以下几点:
>>> a = [1, 2]
[1, 2]
>>> b = [3, 4, 5]
[3, 4, 5]
>>> SOMETHING HERE
>>> a
[1, 2, 3, 4, 5]
我知道有一个a.c concat(b)方法,但它创建了一个新数组,而不是简单地扩展第一个数组。我想要一个算法,有效地工作时,a明显大于b(即一个不复制a)。
注意:这不是“如何将内容追加到数组?”这里的目标是将一个数组的全部内容添加到另一个数组中,并做到“就地”,即不复制扩展数组的所有元素。
只需在push()方法的帮助下向数组添加新元素就可以做到这一点。
let colors = ["Red", "Blue", "Orange"];
console.log(' push前数组:' + colors);
//添加新值到数组
colors.push(“绿色”);
console.log(' push后数组:' + colors);
另一个用于将元素追加到数组开头的方法是unshift()函数,它添加并返回新的长度。它接受多个参数,附加现有元素的索引,最后返回数组的新长度:
let colors = ["Red", "Blue", "Orange"];
console.log(' unshift前数组:' + colors);
//添加新值到数组
颜色。未(“黑色”,“绿色”);
console.log(' unshift后的数组:' + colors);
还有其他方法。你可以在这里查看。
push方法可以接受多个参数。你可以使用展开操作符将第二个数组的所有元素作为参数传递给.push:
>>> a.push(...b)
如果你的浏览器不支持ECMAScript 6,你可以使用.apply来代替:
>>> a.push.apply(a, b)
或者,如果你觉得更清楚的话:
>>> Array.prototype.push.apply(a,b)
请注意,如果数组b太长,所有这些解决方案都将失败,并出现堆栈溢出错误(问题开始于大约100,000个元素,取决于浏览器)。
如果不能保证b足够短,则应该使用另一个答案中描述的基于循环的标准技术。
2018年更新:更好的答案是我的一个更新的答案:A .push(…b)。不要再给这个投票了,因为它从来没有真正回答过这个问题,但它是2015年关于谷歌第一次点击的黑客攻击:)
对于那些仅仅搜索“JavaScript数组扩展”并到达这里的人来说,您可以很好地使用array .concat。
var a = [1, 2, 3];
a = a.concat([5, 4, 3]);
Concat将返回一个新数组的副本,这是线程启动者不想要的。但您可能并不关心(当然对于大多数用途来说,这是可以的)。
ECMAScript 6中还有一些很好的扩展操作符:
const a = [1, 2, 3];
const b = [...a, 5, 4, 3];
(它也复制。)
只需在push()方法的帮助下向数组添加新元素就可以做到这一点。
let colors = ["Red", "Blue", "Orange"];
console.log(' push前数组:' + colors);
//添加新值到数组
colors.push(“绿色”);
console.log(' push后数组:' + colors);
另一个用于将元素追加到数组开头的方法是unshift()函数,它添加并返回新的长度。它接受多个参数,附加现有元素的索引,最后返回数组的新长度:
let colors = ["Red", "Blue", "Orange"];
console.log(' unshift前数组:' + colors);
//添加新值到数组
颜色。未(“黑色”,“绿色”);
console.log(' unshift后的数组:' + colors);
还有其他方法。你可以在这里查看。
答案非常简单。
>>> a = [1, 2]
[1, 2]
>>> b = [3, 4, 5]
[3, 4, 5]
>>> SOMETHING HERE
(The following code will combine the two arrays.)
a = a.concat(b);
>>> a
[1, 2, 3, 4, 5]
Concat的作用与JavaScript字符串连接非常相似。它将返回您在调用函数的数组末尾放入concat函数的参数的组合。关键是你必须把返回值赋给一个变量,否则它就会丢失。例如,
a.concat(b); <--- This does absolutely nothing since it is just returning the combined arrays, but it doesn't do anything with it.