我有这个AngularJS服务。
demoService.getDemoData($scope.countEP).then(function (data) {
console.log(data);
for (var i = 0; i < data.length; i++) {
$scope.allEditorPicks.push(data[i]);
}
});
在这种情况下,allEditorPicks是我在代码顶部定义的数组,如下所示。
$ scope.allEditorPicks = [];
问题在于,当我使用此阵列并打印这些数据时,阵列具有相同的项目。复制。所以我需要一种方法来检查现有项目并停止在allEditorPicks数组中添加它们。我们需要在for循环中执行此操作。我尝试在for循环中添加另一个循环并读取allEditorPicks数组并检查。但这也不起作用。
demoService.getDemoData($scope.countEP).then(function (data) {
console.log(data);
for (var i = 0; i < data.length; i++) {
for (var j = 0; j < $scope.allEditorPicks.length; j++) {
if ($scope.allEditorPicks[j].itemName == data[i].itemName) {
console.log("Item Exists")
} else {
$scope.allEditorPicks.push(data[i]);
}
}
}
});
这是我尝试的解决方案。当我运行此代码时,我的浏览器冻结并停止工作。请给我一个解决方案。
答案 0 :(得分:0)
首先,按itemName
对数组进行排序,然后根据顺序删除重复项。
data = data.sort(function(a,b){
return a.itemName - b.itemName;
});
for (var i = 0; i < data.length; i++) {
if(data[i].itemName === data[i++].itemName){
console.log("Item Exists");
}else {
$scope.allEditorPicks.push(data[i]);
}
}
答案 1 :(得分:0)
试试这个:
demoService.getDemoData($scope.countEP).then(function (data) {
for(let i = 0; i < data.length; i++){
let found = $scope.allEditorPicks.find(elt => {
return elt.itemName === data[i].itemName;
});
if(!found){
$scope.allEditorPicks.push(data[i]);
}
}
})