Javascript 如何修复angular.forEach中对象的重复?

Javascript 如何修复angular.forEach中对象的重复?,javascript,angularjs,Javascript,Angularjs,请帮助我如何修理它 schema.controller('schemaDetailCtrl', function($scope, ajaxCall, $location) { $scope.storeDetails = [ { "storeName": "Test Store", "zipCode": "201301", "idenNo": "999999" }, { "storeName": "Test2 S

请帮助我如何修理它

schema.controller('schemaDetailCtrl', function($scope, ajaxCall, $location) { $scope.storeDetails = [ { "storeName": "Test Store", "zipCode": "201301", "idenNo": "999999" }, { "storeName": "Test2 Store", "zipCode": "201014", "idenNo": "200037" }, { "storeName": "Test3 Store", "zipCode": "201014", "idenNo": "200137" } ]; $scope.zipcodes = new Array(); angular.forEach($scope.storeDetails, function(store) { this.push(store.zipCode); console.log(store.zipCode); }, $scope.zipcodes); Expected Output : 201301 201014 201014 Actual Output: Error: [ngRepeat:dupes] http://errors.angularjs.org/1.2.20/ngRepeat/dupes?p0=zipcode%20in%20zipcodes&p1=string%3A201014 schema.controller('schemaDetailCtrl',函数($scope,ajaxCall,$location){ $scope.storeDetails=[ { “storeName”:“测试存储”, “zipCode”:“201301”, “idenNo”:“999999” }, { “storeName”:“Test2存储”, “zipCode”:“201014”, “idenNo”:“200037” }, { “storeName”:“Test3存储”, “zipCode”:“201014”, “idenNo”:“200137” } ]; $scope.zipcodes=新数组(); angular.forEach($scope.storeDetails,函数(store){ this.push(store.zipCode); console.log(store.zipCode); },$scope.zipcodes); 预期产出: 201301 201014 201014 实际产量: 错误:[重复:重复]http://errors.angularjs.org/1.2.20/ngRepeat/dupes?p0=zipcode%20in%20zipcodes&p1=string%3A201014
该问题与您的
forEach
没有直接关系。它将从视图中抛出,可以通过将
track by
添加到
ng repeat
语句中来解决:

<div ng-repeat="zip in zipcodes track by $index">

如果您不希望阵列中存在重复项,那么将它们过滤掉将是一个单独的问题


Reference

您可以迭代storeDetails数组,然后引用zipCode属性来显示它,而不是将邮政编码复制到另一个数组中以显示在视图中

<ul ng-repeat="store in storeDetails">
  <li>{{store.zipCode}}</li>
</ul>
  • {{store.zipCode}

这将避免数组中出现重复的问题。

谢谢大家的回答,现在我使用了for loop而不是angular.forEach,听起来不错

for(var i = 0; i < $scope.storeDetails.length; i++) {
    var store = $scope.storeDetails[i];
    if(contains($scope.zipcodes, store.zipCode) === false) {
        $scope.zipcodes.push(store.zipCode);
    }
}

function contains(a, obj) {
    for (var i = 0; i < a.length; i++) {
        if (a[i] === obj) {
            return true;
        }
    }
    return false;
}
for(变量i=0;i<$scope.storeDetails.length;i++){
var store=$scope.storeDetails[i];
if(包含($scope.zipcodes,store.zipCode)==false){
$scope.zipcodes.push(store.zipCode);
}
}
函数包含(a,obj){
对于(变量i=0;i
您之所以会出现此错误,是因为您多次将相同的值推入中继器。这可以在html中完成,但我想在js中的控制器中完成。如果这有帮助,请您将其标记为正确答案,以便清楚这是实际答案,我们不必滚动