具有对象的数组:
var myArr = [ { user: 'jane', properties: ['prop1', 'prop2'] }
{ user: 'bob', properties: ['prop1', 'prop4'] }
{ user: 'dave', properties: ['prop1', 'prop2', 'prop3'] }
{ user: 'tim', properties: ['prop4', 'prop2', 'prop3'] }
];
在纯JavaScript中是否有办法,或者使用lodash获取具有至少一个共同属性的用户?输出应指示哪个用户与哪个用户匹配,没有重复。
我已经尝试了许多方法,但是不幸的是无法获得所需的输出。
以下解决方案使用aSet
来确定是否存在匹配的属性,并结合reduce()
输出匹配的用户对的操作:
const array = [{ user: 'jane', properties: ['prop1', 'prop2'] },
{ user: 'bob', properties: ['prop1', 'prop4'] },
{ user: 'dave', properties: ['prop1', 'prop2', 'prop3'] },
{ user: 'tim', properties: ['prop4', 'prop2', 'prop3'] }];
const result = array.reduce((acc, val1, i, arr) => [
...acc,
...arr.slice(i + 1).filter(val2 => {
const properties = [...val1.properties, ...val2.properties];
return new Set(properties).size < properties.length;
}).map(val2 => [val1.user, val2.user])
], []);
console.log(result);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句