基于属性的两个数组之间的不同对象 - lodash



有没有一种直接的方法可以根据来自两个不同数组的对象属性将不同的对象放入新数组中

当前循环遍历第一个数组,然后与第二个数组中的每个对象进行比较,以维护计数器并推送到新数组(如果不同(。

   var newArray = [];
   _.each(firstArray, function(item) {               //loop items in 1st []
      var count = 0;        
     _.each(secondArray, function(secondItem) {
       if(secondItem.property = item.property) {      
        count++
       }
     }  
  if(count == 0)   newArray.push(item); //push distinct item into new []
  }

示例数据 :

var array1 = [{id:1, busNum: "1234"}, {id:2, busNum:"4567"}]
var array2 = [{id:1, busNum: "2344"}, {id:2, busNum:"1234"}]

想要消除公共巴士(具有相同巴士号码的巴士(

  var newArray = [{id:2, bus:"4567"}, {id:1, bus:"2344"]
您可以使用

_.xorBy进行对称差异。

var array1 = [{id:1, busNum: "1234"}, {id:2, busNum:"4567"}],
    array2 = [{id:1, busNum: "2344"}, {id:2, busNum:"1234"}],
    result = _.xorBy(array1, array2, 'busNum');
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

我相信你想要的是_.xorBy. Xor(独占或(将只为您提供任一集合中的元素,而不是两者。 例如:

_.xorBy(array1, array2, 'bus')

您可以在此处阅读文档。

就集合数学而言,您正在寻找的是外连接。对应的功能是: _.xorBy

例:

_.xorBy(array1, array2, 'prop')
<小时 />

您还可以使用: _.hashFullOuterJoin ,例如:

_.hashFullOuterJoin(array1, 'prop', array2, 'prop')

最新更新