Javascript 如何在n个对象数组中求交?

Javascript 如何在n个对象数组中求交?,javascript,ecmascript-6,lodash,javascript-objects,Javascript,Ecmascript 6,Lodash,Javascript Objects,假设我们有一个对象数组 var users = [[ { user: 'barney', age: 36, active: true }, { user: 'fred', age: 41, active: true }, { user: 'travis', age: 37, active: true } ], [ { user: 'barney1', age: 36, active: true }, { user: 'fred', age: 40, active: fal

假设我们有一个对象数组

var users = [[
  { user: 'barney', age: 36, active: true },
  { user: 'fred',  age: 41, active: true },
  { user: 'travis', age: 37, active: true }
], [
  { user: 'barney1', age: 36, active: true },
  { user: 'fred',  age: 40, active: false },
  { user: 'travis', age: 37, active: true}
], [   
  { user: 'barney1', age: 36, active: true },
  { user: 'fred',  age: 40, active: false },
  { user: 'travis', age: 37, active: true} 
]];
我想在上述对象上应用交点。我试过了 用lodash方法求交

_.intersection(...users)

但是它提供了一个空数组。

您不能使用
..intersection()
,因为它只会比较数组中的对象引用。您必须告诉交集方法如何比较项目

为此,请使用
.intersectionBy()
.intersectionWith()
方法,为其指定要相交的数组,并将用于检查相交的属性作为最后一个参数

根据用户对象的结构和使用方式,用户对象应为数组数组(2D):

const用户=[[
{用户:'barney',年龄:36岁,活动:true},
{用户:'fred',年龄:41,活动:true},
{用户:'travis',年龄:37岁,活动状态:true}
], [
{用户:'barney1',年龄:36,活动:true},
{用户:'fred',年龄:40,活动:false},
{用户:'travis',年龄:37岁,活动状态:true}
], [   
{用户:'barney1',年龄:36,活动:true},
{用户:'fred',年龄:40,活动:false},
{用户:'travis',年龄:37岁,活动状态:true}
]];
const result=u.intersectionBy(…users,'user');
console.log(结果)

如果要基于所有属性是否相同而将它们相交,请使用和

const users=[{user:'barney',age:36,active:true},{user:'fred',age:41,active:true},{user:'travis',age:37,active:true}],{user:'barney1',age:36,active:true},{user:'fred',age:40,active false},{user:'travis age:37,active active true},{user:'barney1',age:36,active true},{user:'fred',40,active false},active travis user:37,active
const intersected=u.intersectionWith(…用户,u.isEqual);
console.log(交叉)

否不能使用交叉点,有任何选择吗?@Prem Bhushan Karn,请查看我的更新答案,您不能使用交叉点,您必须告诉lodash如何比较arrays@PremBhushan Karn,如果u.intersectionBy不是一个选项,我添加了一个简单的JavaScript解决方案tooNo,当每个值在object@PremBhushanKarn updated@adiga-您可以直接通过isEqual(无需使用箭头功能)@OriDrori您是对的。更新。基于哪个属性进行交集?是否要获取数组中的唯一项?假设我们有[1,2,4,5][2,3,4,1],[5,4,3,1,7,8.9],如果交集[1,4]应该返回,但这是一个数组,我需要为ObjectsY数组实现相同的项,则可以执行此操作,但不能使用0.intersection,您必须使用u.intersectionBy或纯Javascript。我以2D数组的形式向您的用户更新了我的答案