javascript - 常规推送和 Array.prototype.push.apply 之间有什么区别

标签 javascript javascript-objects apply

我不太明白下面两行代码的区别。在我的代码中,带有“应用”的行按照我想要的方式工作,而带有常规推送的行则没有。

那么当这两个都被执行时到底发生了什么:

//this one does not work the way i want it to
$scope.items.push(result.data.stuff)

//this one works!
Array.prototype.push.apply($scope.items, result.data.stuff);

编辑:抱歉造成混淆,我修复了它,以便它具有“推送”方法

最佳答案

新 1. 将数组推送到项目上。

$scope.items = [1, 2];
result.data.stuff = [3, 4];
$scope.items.push(result.data.stuff);
$scope.items[0] === 1;
$scope.items[1] === 2;
$scope.items[2][0] === 3;
$scope.items[2][1] === 4;

旧 1. 删除 $scope.items 中的现有引用。

$scope.items = [1, 2];
result.data.stuff = [3, 4];
$scope.items = result.data.stuff;
$scope.items[0] === 3;
$scope.items[1] === 4;

2。将 result.data.stuff 中的所有项目推送到 $scope.items 中,保留现有项目。

$scope.items = [1, 2];
result.data.stuff = [3, 4];
Array.prototype.push.apply($scope.items, result.data.stuff);
$scope.items[0] === 1;
$scope.items[1] === 2;
$scope.items[2] === 3;
$scope.items[3] === 4;

关于javascript - 常规推送和 Array.prototype.push.apply 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35638511/

相关文章:

javascript - jquery中如何获取当前被选元素的outerHTML

javascript - 试图将游戏光标更改为图像

javascript - 将选定的选项附加到选择器

javascript - 单击标签时,复选框 'change' 事件起作用。在 ie8, ie7 中

javascript - Object.keys() 排序标准?

javascript - 当属性不为空时向对象添加属性

python - 有没有一种方法可以在不调用 TypeError 的情况下使用错误数量的参数调用 Python 函数?

javascript - 删除原始对象,同时在 JavaScript 中保留其副本

python - Pandas.DataFrame.apply 返回 None 值

r - 仅选择 data.frame R 中具有有限值的行