2017-08-04 67 views
0

我有2个对象数组。如何获得不匹配另一个对象的对象lodash

const a = [ 
{ 
    name: 'John' 
}, 
{ 
    name: 'Adam' 
} 
] 

const b = [ 
{ 
    name: 'Adam' 
} 
] 

我想要得到的数组中的对象是不一样的,并且也得到在数组中同样的对象。

const same = [ 
{ 
    name: 'Adam' 
} 
] 

const not_same = [ 
{ 
    name: 'John' 
} 
] 

使用lodash库有可能吗?

+1

你有试过什么吗? –

+0

自己尝试一下,然后回到问题。提示:https://lodash.com/docs/4.17.4#find –

回答

0

您可以使用intersectionByxorBy如下:

const a = [{ 
 
    name: 'John' 
 
    }, 
 
    { 
 
    name: 'Adam' 
 
    } 
 
]; 
 

 
const b = [{ 
 
    name: 'Adam' 
 
}]; 
 

 
console.log(_.intersectionBy(a, b, 'name')); // values present in both arrays 
 
console.log(_.xorBy(a, b, 'name')); // values present in only one of the arrays
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

0

您可以使用_.partition()按照一定的标准,以获得两个数组:

const a = [{ 
 
    name: 'John' 
 
    }, 
 
    { 
 
    name: 'Adam' 
 
    } 
 
]; 
 

 
const b = [{ 
 
    name: 'Adam' 
 
}]; 
 

 
const bMap = _.keyBy(b, 'name'); // create a map of names in b 
 
const [same, not_same] = _.partition(a, ({ name }) => name in bMap); // partition according to bMap and destructure into 2 arrays 
 

 
console.log('same: ', same); 
 

 
console.log('not_same: ', not_same);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>