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在另一个中使用两个来实现这一目标......除非这是我可以对这种排序做的最好的方法?
您应该使用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)
我可以向您推荐这段代码,它可以很好地解决您的问题:
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)