Array.prototype.push.apply意外行为

时间:2015-12-16 10:08:32

标签: javascript

我正在尝试使用Array.prototype.push.apply来合并两个列表。

c = Array.prototype.push.apply(a, b);

但是,当第二个数组为[]时,这不会合并数组。

例如

a = ['x', 'y', 'z']
b = []

c将为3

为什么会这样? 不应该像任何阵列那样对待[]吗?

4 个答案:

答案 0 :(得分:1)

只需使用Array.prototype.concat:

c = a.concat(b);

答案 1 :(得分:1)

这是完全正确的,因为Array.push()将返回新数组的长度。

如果您想要一个具有连接值的新数组,请改用Array.concat()

答案 2 :(得分:1)

您可能尝试实现的目的是使用push.applyb附加到a。但是,此方法意味着您无需创建新数组c来保存结果。

var a = [1, 2, 3, 4], b = [5];
a.push.apply(a, b); // a = [1, 2, 3, 4, 5]

答案 3 :(得分:1)

你真正的问题是.apply,它询问contetx(a)和一个值数组(b),如果你传递一个空数组,它就像你没有传递任何值......

试试这个:

c = Array.prototype.push.call(a, b);

//c = 4