如何使用lodash intersectionWith在具有不同结构的两个数组中比较并找到具有相同值的相同属性?

Eze*_*wei 4 javascript arrays sorting intersection lodash

例如,我有两组数组

arr1 = [
  {
    myName: 'Adam',
    mySkill: 'CSS',
  },
  {
    myName: 'Mutalib',
    mySkill: 'JavaScript',
  },
];

arr2 = [
  {
    myName: 'Adam',
    myWeight: '112',
  },
  {
    myName: 'Habib',
    myWeight: '221',
  },
];
Run Code Online (Sandbox Code Playgroud)

我尝试比较它们,并选择myName与 lodash 的intersectionWith函数相同的值。但一直无法做到

newList.push(intersectionWith(arr1.arr2,isEqual])); 
Run Code Online (Sandbox Code Playgroud)

*在这种情况下,结果intersectionWith(arr1.arr2,isEqual])应该是Adam

关于我应该如何进一步进行的任何建议、解决方案和想法?

另外,以前我forEach在另一个中使用两个来实现这一目标......除非这是我可以对这种排序做的最好的方法?

rye*_*lar 5

您应该使用intersectionBy()按属性获取交集。

var result = _.intersectionBy(arr1, arr2, 'myName');
Run Code Online (Sandbox Code Playgroud)

var result = _.intersectionBy(arr1, arr2, 'myName');
Run Code Online (Sandbox Code Playgroud)
var arr1 = [{
  myName: 'Adam',
  mySkill: 'CSS',
}, {
  myName: 'Mutalib',
  mySkill: 'JavaScript',
}];

var arr2 = [{
  myName: 'Adam',
  myWeight: '112',
}, {
  myName: 'Habib',
  myWeight: '221',
}];

var result = _.intersectionBy(arr1, arr2, 'myName');

console.log(result);
Run Code Online (Sandbox Code Playgroud)

如果您只想提取与myName值的交集,那么您可以使用intersectionBy()map()懒惰地评估它。

var result = _(arr1).intersectionBy(arr2, 'myName').map('myName').value();
Run Code Online (Sandbox Code Playgroud)

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.js"></script>
Run Code Online (Sandbox Code Playgroud)
var result = _(arr1).intersectionBy(arr2, 'myName').map('myName').value();
Run Code Online (Sandbox Code Playgroud)


kev*_*net 0

我可以向您推荐这段代码,它可以很好地解决您的问题:

var jawn = arr1.map(v => v.myName).concat( arr2.map(v => v.myName)).sort().filter(function(item, pos, self) {
   return self.indexOf(item) != pos;
});

console.log(jawn);
Run Code Online (Sandbox Code Playgroud)