【问题标题】:How to fix duplicatation of object in angular.forEach?如何修复 angular.forEach 中对象的重复?
【发布时间】:2016-01-20 23:42:40
【问题描述】:

请帮助我如何解决它。

schema.controller('schemaDetailCtrl', function($scope, ajaxCall, $location) { $scope.storeDetails = [ { "storeName": "测试商店", "邮编": "201301", “idenNo”:“999999” }, { "storeName": "Test2 商店", "邮编": "201014", “idenNo”:“200037” }, { "storeName": "Test3 商店", "邮编": "201014", “idenNo”:“200137” } ]; $scope.zipcodes = new Array(); angular.forEach($scope.storeDetails, function(store) { this.push(store.zipCode); console.log(store.zipCode); }, $scope.zipcodes); 预期输出: 201301 201014 201014 实际输出: 错误:[ngRepeat:dupes] http://errors.angularjs.org/1.2.20/ngRepeat/dupes?p0=zipcode%20in%20zipcodes&p1=string%3A201014

【问题讨论】:

  • 您收到该错误是因为您将相同的值多次推送到转发器中

标签: javascript angularjs


【解决方案1】:

感谢大家的回答,现在我用 for 循环代替了 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;
}

【讨论】:

  • 如果这有帮助,请您将其标记为正确答案,以便清楚这是实际答案,我们不必滚动
【解决方案2】:

无需将邮政编码复制到另一个数组中以显示在您的视图中,您只需遍历 storeDetails 数组,然后引用 zipCode 属性即可显示它。

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

这样可以避免数组中的重复问题。

【讨论】:

  • Devitall,这可以在 html 中完成,但我想在 js 中的控制器中完成。
【解决方案3】:

此问题与您的forEach 直接无关。它正在从视图中抛出,可以通过将 track by 添加到 ng-repeat 语句来解决:

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

如果您不希望数组中出现重复项,那么将它们过滤掉是一个单独的问题。

参考ng-repeat docs

【讨论】:

    猜你喜欢
    • 2017-08-22
    • 1970-01-01
    • 2019-08-18
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多