Javascript Underline.js筛选器操作以动态创建对象列表
我已经完成了以下工作,以循环遍历AngularJS中的两个对象列表,并有条件地创建一个新的对象列表Javascript Underline.js筛选器操作以动态创建对象列表,javascript,angularjs,underscore.js,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 == $s
$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.loading=true;
$scope.toUpdate=[];
对于(变量i=0;i
当值被用户更改时,我正在创建一个对象列表($scope.originalItems
具有原始值)
我将其发送给MVC控制器以更新更改
我这样做是因为我不需要更新那些未更改的值
这种方法正在进行多次迭代
要求:
我确信这可以通过subline.js以一种直接的方式完成,但我无法做到
需要将此逻辑转换为下划线的帮助。您的代码可以转换为下划线,如下所示:
_.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;
});
});
更新
查看以下文档:这里没有下划线攻击,我不是专家,但您应该查看“lo dash”。它的灵感来源于下划线,但应该更高效,并具有更多功能。如图所示:。我只是在这里评论一下,这样你就可以检查一下你的项目是否很新,你仍然可以很容易地替换它。你的解决方案可行,但我可以知道你的解决方案的工作方式吗?检查Lodash的文档(绝对同意Tsasken,它比下划线改进得多),顺便问一下:你能重新表述一下你关于“解决方案如何工作”的问题吗