Javascript-在es6中,使用多个字段计算对象数组中的重复项
我有这样的对象数组Javascript-在es6中,使用多个字段计算对象数组中的重复项,javascript,ecmascript-6,Javascript,Ecmascript 6,我有这样的对象数组 const array = [ { x: 1, y: 2 }, { x: 3, y: 4 }, { x: 1, y: 2 }, { x: 3, y: 4 }, { x: 1, y: 2 }, { x: 3, y: 12 } ] 我想计算重复对象的数量,并将该数量存储为新对象字段 我发现这段代码非常有用,但它并不是我所需要的 const names = [{ _id: 1 }, { _id: 1}, { _id: 2}, { _id: 1}] const resu
const array = [ { x: 1, y: 2 }, { x: 3, y: 4 }, { x: 1, y: 2 }, { x: 3, y: 4 }, { x: 1, y: 2 }, { x: 3, y: 12 } ]
我想计算重复对象的数量,并将该数量存储为新对象字段
我发现这段代码非常有用,但它并不是我所需要的
const names = [{ _id: 1 }, { _id: 1}, { _id: 2}, { _id: 1}]
const result = [...names.reduce( (mp, o) => {
if (!mp.has(o._id)) mp.set(o._id, Object.assign({ count: 0 }, o));
mp.get(o._id).count++;
return mp;
}, new Map).values()];
console.log(result);
它使用一个字段id的对象。在我的例子中有两个,x和y
我应该如何修改该代码
简言之,我希望收到以下结果:
result = [ { x: 1, y: 2, count:3 }, { x: 3, y: 4, count:2 }, { x: 3, y: 12, count:1 } ]
您可以使用
Object.values()
和reduce()
方法返回新的对象数组
const数组=[{x:1,y:2},{x:3,y:4},{x:1,y:2},{x:3,y:4},{x:1,y:2},{x:3,y:12}]
const result=Object.values(array.reduce)(r,e)=>{
设k=`${e.x}|${e.y}`;
如果(!r[k])r[k]={…e,计数:1}
否则r[k]。计数+=1;
返回r;
}, {}))
console.log(result)
一种方法是创建一个将x和y映射到结果项的索引:
let index={};
让结果=[];
常量数组=[{x:1,y:2},{x:3,y:4},{x:1,y:2},{x:3,y:4},{x:1,y:2},{x:3,y:12}];
array.forEach(点=>{
让key=''+point.x+'| |'+point.y;
如果(输入索引){
索引[键]。计数++;
}否则{
设newEntry={x:point.x,y:point.y,count:1};
索引[键]=新条目;
结果:推送(newEntry);
}
});
控制台日志(结果)
您可以使用JSON.stringify([o.x,o.y])
或o.x+'|'+o.y
而不是o.\u id
-任何唯一标识您的对象并适合您的数据类型的东西谢谢!这正是我所需要的。我可以在中使用条件来计算像这样的对象的值吗let data=[{no:3,name:'drink'},{no:90,name:'eat'},{no:20,name:'swim'}]代码>