使用angularjs数组中的slice
using slice in angularjs array
在我的angularjs应用程序中,我需要手动从数据数组中删除或添加旧数据/新数据(服务在循环中执行)。对于remove,我使用slice();但有一个问题:该项被正确删除,但execVerif_distant();不为下一个项目执行。使用我的实际代码execVerif_distant();对于每个项目只执行一半时间。例如,如果我需要移除整个数组,那么只移除一半。
// start the loop, search in local datas
angular.forEach($scope.seaDocument.datas.cages, function(itemLocalCages) {
execVerif_local(itemLocalCages.url);
});
function execVerif_local(identifiant) {
var iterSearch_local = 0;
angular.forEach(responseZS, function(itemDistantCages) {
if (itemDistantCages.url == identifiant) {
iterSearch_local++;
}
});
// if we not find the local datas in distant datas
if (iterSearch_local == 0) {
// verifItem(); call
verifItem('remove', identifiant);
}
}
// verifItem();
function verifItem(action, url) {
if (action == 'remove') {
var iIndex = -1;
angular.forEach($scope.seaDocument.datas.cages, function(itemLocalCages) {
iIndex++;
if (itemLocalCages.url == url) {
$scope.seaDocument.datas.cages.splice(iIndex,1);
}
});
} else {
// do nothing
}
}
怎么了?
问题是foreach
正在对要从中删除内容的同一对象进行迭代。为了避免这种行为,在循环之前克隆您正在迭代的对象,并将它们作为单独的对象进行处理:
// ... code
var arrCopy = $scope.seaDocument.datas.cages.slice(); //this will create a deep copy.
angular.forEach(arrCopy, function(itemLocalCages) {
iIndex++;
if (itemLocalCages.url == url) {
$scope.seaDocument.datas.cages.splice(iIndex,1);
}
});
//... more code
相关文章:
- 如何在映射数组中添加换行符
- javascript结合了数组和字典
- 需要帮助设置json数组
- 不能从angular2中的子组件指定父组件中的数组
- 使用angularjs数组中的slice
- 转换类似数组的对象Array.prototype.slice或Array.from
- Javascript:使用 slice() 从数组中选择除一个项目之外的所有项目
- 在 .slice 之后重置 JSON 数组
- 使用 prototype.slice.call 定义动态二维数组
- 通过 Array.prototype.slice() 更改克隆的数组会影响原始数组
- Slice() 不适用于 2D 数组
- 在像对象这样的数组上使用slice()方法
- 将Slice与Knockout创建的数组一起使用's映射插件
- Javascript数组复制,concat和slice,哪个更好
- 使用数组原型Slice调用
- Slice没有't似乎在函数数组中起作用
- array.slice()复制一个新数组
- 如果array .prototype.slice()方法返回浅拷贝,为什么改变切片数组的值不会改变原始数组
- 如何使用slice方法从数组中获取一个随机元素并将其存储
- 使用 Array.prototype.slice() 深度复制数组