Javascript AngularJs使用数据绑定刷新将多个值从数组推送到另一个数组

Javascript AngularJs使用数据绑定刷新将多个值从数组推送到另一个数组,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我正在从服务器获取一个数组,该数组中可以包含0..n个元素。然后,我将其添加到本地用于数据绑定的数组中(基本上是在客户端缓存数据)。以这种方式进行时,数据分类不会出现任何问题: for (var i = 0 ; i < data.Result.length ; i++) { scope.cachedData.push(data.Result[i]); } for(var i=0;i

我正在从服务器获取一个数组,该数组中可以包含0..n个元素。然后,我将其添加到本地用于数据绑定的数组中(基本上是在客户端缓存数据)。以这种方式进行时,数据分类不会出现任何问题:

for (var i = 0 ; i < data.Result.length ; i++) {
    scope.cachedData.push(data.Result[i]);
}
for(var i=0;i

意思-视图刷新,一切正常。但是当我尝试时:
scope.cachedData.concat(data.Result)它不会工作。为什么会这样?

如果要在一条指令中推送所有内容,请使用
apply
而不中断对
作用域的引用。cachedData

Array.prototype.push.apply(scope.cachedData, data.Result);

此外,我知道这有点离题,但如果您想在特定索引处插入,可以使用
splice
apply

// I definitely want to prepend to my array here
var insertionIndex = 0,
// we don't want to delete any elements here from insertionIndex
    deleteCount = 0;
// Because we use apply the second argument is an array
// and because splice signature is (startIndex, noOfElementsToDelete, elementsToInsert)
// we need to build it
Array.prototype.splice.apply(scope.cachedData, [insertionIndex, deleteCount].concat(data.Result));

想象一下你的数组
scope.cachedData=[3,4]
data.Result=[1,2],使用上面的代码
作用域。cachedData
将成为
[1,2,3,4]
如果要在单个指令中推送所有内容,请使用
应用
而不中断对
作用域的引用。cachedData

Array.prototype.push.apply(scope.cachedData, data.Result);

此外,我知道这有点离题,但如果您想在特定索引处插入,可以使用
splice
apply

// I definitely want to prepend to my array here
var insertionIndex = 0,
// we don't want to delete any elements here from insertionIndex
    deleteCount = 0;
// Because we use apply the second argument is an array
// and because splice signature is (startIndex, noOfElementsToDelete, elementsToInsert)
// we need to build it
Array.prototype.splice.apply(scope.cachedData, [insertionIndex, deleteCount].concat(data.Result));

想象一下你的数组
scope.cachedData=[3,4]
data.Result=[1,2]
,使用上面的代码
作用域。cachedData
将成为
[1,2,3,4]

,可能是因为concat不修改相同的数组,而是返回一个新数组。。。试试
scope.cachedData=scope.cachedData.concat(data.Result)
@doodeec-你完全正确。从性能的角度来看,这个新任务会比.push更糟糕吗?是否可以执行一些.pushAll()方法而不是在中执行它?我认为推送可以更快,因为它不会更改原始数组中现有的引用,它只是添加了一个新的引用。。。因此,如果您在
ng repeat
中使用数组,它将更新得更快,并且元素在更新时不会闪烁,这可能是因为concat不会修改相同的数组,而是返回一个新数组。。。试试
scope.cachedData=scope.cachedData.concat(data.Result)
@doodeec-你完全正确。从性能的角度来看,这个新任务会比.push更糟糕吗?是否可以执行一些.pushAll()方法而不是在中执行它?我认为推送可以更快,因为它不会更改原始数组中现有的引用,它只是添加了一个新的引用。。。因此,如果您在
ng repeat
中使用数组,它将更新得更快,并且元素在更新nice one时不会闪烁,我肯定会开始使用nice one,我肯定会开始使用它