js 合并两个数组

1.使用Array.prototype.push   apply() 添加第二个数组的所有元素。

arr.push(element1, ..., elementN)

注意当第二个数组(如示例中的moreVegs)太大时不要使用这个方法来合并数组,因为事实上一个函数能够接受的参数个数是有限制的。具体可以参考 apply() 。

var vegetables = ['parsnip', 'potato'];
var moreVegs = ['celery', 'beetroot', '3'];

// 将第二个数组融合进第一个数组
// 相当于 vegetables.push('celery', 'beetroot');
Array.prototype.push.apply(vegetables, moreVegs);

console.log(vegetables);
// ['parsnip', 'potato', 'celery', 'beetroot','3']

 意:如果按上面方式调用apply,有超出JavaScript引擎参数长度上限的风险。一个方法传入过多参数(比如一万个)时的后果在不同JavaScript 引擎中表现不同。(JavaScriptCore引擎中有被硬编码的 参数个数上限:65536)。这是因为此限制(实际上也是任何用到超大栈空间的行为的自然表现)是不明确的。一些引擎会抛出异常,更糟糕的是其他引擎会直接限制传入到方法的参数个数,导致参数丢失。比如:假设某个引擎的方法参数上限为2(实际上限当然要高得多), 这种情况下,上面的代码执行后, 真正被传递到 apply的参数为 'celery', 'beetroot' ,而不是完整的数组。

如果你的参数数组可能非常大,那么推荐使用下面这种混合策略:将数组切块后循环传入目标方法:arr.slice()

2. array.splice(start[, deleteCount[, item1[, item2[, ...]]]])

var vegetables = ['parsnip', 'potato'];
var moreVegs = ['celery', 'beetroot', '3'];
vegetables.splice(1,0,...moreVegs)
console.log(vegetables)
//[ 'parsnip', 'celery', 'beetroot', '3', 'potato' ]

 3.使用Array.prototype.unshift   apply() 添加第二个数组的所有元素。

arr.unshift(element1, ..., elementN)
var vegetables = ['parsnip', 'potato'];
var moreVegs = ['celery', 'beetroot', '3'];

// 将第二个数组融合进第一个数组
// 相当于 vegetables.unshift('celery', 'beetroot');
Array.prototype.unshift.apply(vegetables, moreVegs);

console.log(vegetables);
// [ 'celery', 'beetroot', '3', 'parsnip', 'potato' ]

  4.使用Array.prototype.concat   apply() 添加第二个数组的所有元素。(返回一个浅拷贝,它包含与原始数组相结合的相同元素的副本)

var new_array = old_array.concat(value1[, value2[, ...[, valueN]]])
var vegetables = ['parsnip', 'potato'];
var moreVegs = ['celery', 'beetroot', '3'];

console.log(Array.prototype.concat.apply(vegetables, moreVegs));
console.log([].concat(vegetables, moreVegs));
// [ 'parsnip', 'potato', 'celery', 'beetroot', '3' ]

 



posted @ 2021-05-28 16:44  尖子  阅读(588)  评论(0编辑  收藏  举报