【问题标题】:Array objects difference javascript angularjs数组对象差异javascript angularjs
【发布时间】:2015-04-27 21:21:17
【问题描述】:

我有 2 个数组对象,我想得到它们之间的区别如下:

array1 = [{"name":"MPCC","id":"tool:mpcc"}, {"name":"APP","id":"tool:app"}, {"name":"AII","id":"tool:aii"}, {"name":"VZZ","id":"tool:vzz"}, {"name":"USU","id":"tool:usu"}]

array2 = [{"name":"APP","id":"tool:app"}, {"name":"USU","id":"tool:usu"}]

result = [{"name":"MPCC","id":"tool:mpcc"}, {"name":"AII","id":"tool:aii"}, {"name":"VZZ","id":"tool:vzz"}]

代码如下:

$scope.initial = function(base, userData){
    var result = [];
    angular.forEach( base, function(baseItem) {
        angular.forEach( userData, function( userItem ) {
            if ( baseItem.id !== userItem.id ) {
                if (result.indexOf(baseItem) < 0) { 
                    result.push(baseItem);
                }
            }
        });
    });
    return result;
}
$scope.initial(array1, array2);

上面代码的问题是我没有得到想要的结果。请让我知道出了什么问题。

【问题讨论】:

    标签: javascript arrays angularjs object difference


    【解决方案1】:

    这与 Angular 无关。

    你可以这样做:

    var result = array1.filter(function(item1) {
      for (var i in array2) {
        if (item1.id === array2[i].id) { return false; }
      };
      return true;
    });
    

    或者使用 ES6 语法:

    var result = array1.filter(i1 => !array2.some(i2 => i1.id === i2.id));
    

    【讨论】:

    • 如果我的 angularjs 标签具有误导性,我真的很抱歉。这个解决方案就像一个魅力。非常感谢。
    • 工作得很好
    【解决方案2】:

    我认为这与 Angular 本身无关。您正在寻找一种算法来计算两组之间的差异。

    主题已经是discussed。你可能也对此感兴趣underscore plugin

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-19
      • 2018-03-31
      • 1970-01-01
      • 2016-12-28
      • 2020-09-19
      • 2020-09-18
      • 1970-01-01
      相关资源
      最近更新 更多