Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Array.prototype.push.apply意外行为_Javascript - Fatal编程技术网

Javascript Array.prototype.push.apply意外行为

Javascript Array.prototype.push.apply意外行为,javascript,Javascript,我正在尝试使用Array.prototype.push.apply合并两个列表 c = Array.prototype.push.apply(a, b); 但是,当第二个阵列为[]时,这不会合并阵列 例如如果 a = ['x', 'y', 'z'] b = [] c将是3 为什么会这样? 难道不应该像对待任何数组一样对待[]吗?只需使用array.prototype.concat: c = a.concat(b); 只需使用Array.prototype.concat: c = a.con

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

c = Array.prototype.push.apply(a, b);
但是,当第二个阵列为
[]
时,这不会合并阵列

例如如果

a = ['x', 'y', 'z']
b = []
c
将是
3

为什么会这样?
难道不应该像对待任何数组一样对待
[]
吗?

只需使用array.prototype.concat:

c = a.concat(b);

只需使用Array.prototype.concat:

c = a.concat(b);

这是完全正确的,因为它将返回新数组的长度


如果您想要一个具有串联值的新数组,请改用。

这是完全正确的,因为它将返回新数组的长度


如果您想要一个具有串联值的新数组,请改用。

您可能一直试图实现的是使用
push。apply
b
附加到
a
。但是,此方法意味着您不必创建新的数组
c
来保存结果

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

您可能一直试图实现的是使用
push。apply
b
附加到
a
。但是,此方法意味着您不必创建新的数组
c
来保存结果

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

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

试试这个:

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

//c = 4 

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

试试这个:

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

//c = 4 

push方法返回新阵列的长度“fails”是什么意思?结果
3
出乎意料的是什么?您在“工作”的位置尝试了哪些输入?push方法返回新阵列的长度“失败”是什么意思?结果
3
出乎意料的是什么?您在“有效”的地方尝试了哪些输入?