【问题标题】:Latest Array and previous array values compare最新数组和以前的数组值比较
【发布时间】:2018-09-23 08:49:07
【问题描述】:

我是 javascript 和 Angular 的新手。现在这可能是一个重复的问题,但我在这方面面临问题,

所以,我有两个对象数组:

$scope.previous = [{name: 'A', Value: 'B'}, {name: 'ABC', value: 'PQR'}];

我有一个新的更新数组:

$scope.updated = [{name: 'A', value:'C'}, {name: 'K', value: 'S'}, {name: 'ABC', value: 'PQR'}]

现在更新不过是经过一些操作之前变成了这样。

现在在这里,我想比较一下这个新的和以前的。

所以如果一个对象在以前不存在并且正在更新,那么它应该将它添加到 diff 数组中。同样,如果两个数组中的对象相同,则不应将其添加到新数组中,如果对象存在于更新后的数组中但不在前一个数组中,则不应将其添加到 diff 数组中。我怎样才能做到这一点?

【问题讨论】:

    标签: javascript arrays angularjs html


    【解决方案1】:

    这是一个简单的,无需添加额外库的解决方案。我认为名称在每个对象中都是唯一的,在您的情况下可能会有所不同。

     
    
          const prev = [{name: 'A', value: 'C'}, {name: 'ABC', value: 'PQR'},{name: 'sss', value: 'sss'} ];
        const latest = [{name: 'AX', value:'CX'}, {name: 'K', value: 'S'}, {name: 'ABC', value: 'PQR'}];
          const whatDoesNotInclude = [];
    const inPrevNotInLatest = [];
        
        const searchByname = (nameKey, myArray) => {
            for (var i=0; i < myArray.length; i++) {
                if (myArray[i].name === nameKey) {
                    return myArray[i];
                }
            }
        }
        
        latest.forEach(l =>{
          if (searchByname(l.name, prev)) {   
          }else {
            whatDoesNotInclude.push(l);
          }
        });
    
     prev.forEach(l =>{
          if (searchByname(l.name, latest)) {   
          }else {
            inPrevNotInLatest.push(l);
          }
        });
        
        console.log(whatDoesNotInclude);
    console.log(inPrevNotInLatest);

    【讨论】:

    • 这里,如果我想要另一个数组,其中的对象不在更新的数组中但在前一个数组中?
    • @ganesh 我已经更新了代码,现在你应该得到两种方式
    • @ganesh 更新的代码是否满足您的需求?如果完成,则将其标记为答案。
    【解决方案2】:

    var previous = [{name: 'A', Value: 'B'}, {name: 'ABC', value: 'PQR'}];
    var updated = [{name: 'A', value:'C'}, {name: 'K', value: 'S'}, {name: 'ABC', value: 'PQR'}]
    
    function comparer(otherArray){
      return function(current){
        return otherArray.filter(function(other){
          return other.value == current.value && other.display == current.display
        }).length == 0;
      }
    }
    var onlyInA = previous.filter(comparer(updated));
    var onlyInB = updated.filter(comparer(previous));
    
    console.log(onlyInA);
    console.log(onlyInB);
    
    difference = previous.filter(function(x) { return updated.indexOf(x) < 0 })
    
    console.log(difference);

    var previous = [{name: 'A', Value: 'B'}, {name: 'ABC', value: 'PQR'}];
    var updated = [{name: 'A', value:'C'}, {name: 'K', value: 'S'}, {name: 'ABC', value: 'PQR'}]
    
    var presentInArray = _.intersectionWith(previous, updated, _.isEqual);
    console.log(presentInArray) //present in array
    var differenceInArray = _.differenceWith(previous, updated, _.isEqual);
    console.log(differenceInArray);//difference in array
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.4/lodash.min.js"&gt;&lt;/script&gt;

    您可以使用lodash 来获取两个对象数组之间的差异

    希望这会有所帮助!

    【讨论】:

    • 其实我是不允许使用外部库的。感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 2018-04-21
    • 2016-07-30
    • 1970-01-01
    • 2015-07-10
    相关资源
    最近更新 更多