Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-在es6中,使用多个字段计算对象数组中的重复项_Javascript_Ecmascript 6 - Fatal编程技术网

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'}]