Underscore.js过滤操作以动态创建对象列表

时间:2014-09-30 08:36:10

标签: javascript angularjs underscore.js

我已经完成以下操作来遍历AngularJS中的两个对象列表并有条件地创建一个新的对象列表。

$scope.loading = true;
$scope.toUpdate = [];
for (var i = 0; i < changedItems.length; i++) {
  for (var j = 0; j < $scope.originalItems.length; j++) {
    if (changedItems[i].AttributeName == $scope.originalItems[j].AttributeName 
        && changedItems[i].Value != $scope.originalItems[j].Value) {
          $scope.toUpdate.push(changedItems[i]);
    }
  }
}

当用户更改值时,我正在创建一个对象列表($scope.originalItems具有原始值)。

我将它发送到MVC控制器以更新更改。

我这样做是因为我不需要更新那些尚未更改的值。

这种方法正在进行多次迭代。

要求:

我确信这可以完成 使用Underscore.js ,但我无法做到。

需要帮助将此逻辑转换为Underscore。

1 个答案:

答案 0 :(得分:1)

您可以将代码转换为下划线:

_.each(item,function(i){
    _.each($scope.previous,function(p) {
         if (i.AttributeName == p.AttributeName && i.Value != p.Value) 
          $scope.toUpdate.push(i);
    });
});

但我认为你想避免重复项目,那么你可以试试这个:

$scope.toUpdate = _.filter(item,function(i) {
    return _.any($scope.previous,function(p){
        return i.AttributeName == p.AttributeName && i.Value != p.Value;
    });
});

JSFiddle

<强>更新

检查以下文档:.each .filter _.any