Javascript 按数组中的2个属性对相同对象进行计数,并引入计数属性
尝试对对象数组中的几个对象进行计数,以便检查两个属性,如果它们相同,则增加计数 编辑:基本上,我想检查Javascript 按数组中的2个属性对相同对象进行计数,并引入计数属性,javascript,arrays,object,ecmascript-6,Javascript,Arrays,Object,Ecmascript 6,尝试对对象数组中的几个对象进行计数,以便检查两个属性,如果它们相同,则增加计数 编辑:基本上,我想检查itemId和orderId,如果数组中有另一个具有相同值的对象,我想增加计数 input => [{itemName: "Burger", itemId: 111, orderId: 123}, {itemName: "Burger", itemId: 111, orderId: 123}, {itemName: "Pizza&quo
itemId
和orderId
,如果数组中有另一个具有相同值的对象,我想增加计数
input =>
[{itemName: "Burger", itemId: 111, orderId: 123},
{itemName: "Burger", itemId: 111, orderId: 123},
{itemName: "Pizza", itemId: 222, orderId: 456}]
output =>
[{itemName: "Burger", itemId: 111, orderId: 123, count: 2},
{itemName: "Pizza", itemId: 222, orderId: 456, count: 1}]
我尝试使用reduce函数和简单的forEach,但最接近的是:
counter = {}
myArray.forEach(function(obj) {
var key = JSON.stringify(obj)
counter[key] = (counter[key] || 0) + 1
})
result =>
[{itemName: "Burger", itemId: 111, orderId: 123}: 2,
{itemName: "Pizza", itemId: 222, orderId: 456}: 1 ]
我能在这方面得到一些帮助吗?您可以使用
Object.values
和Array.prototype.reduce的组合:
var input=[{itemName:“Burger”,itemId:111,orderId:123},
{itemName:“Burger”,itemId:111,orderId:123},
{itemName:“比萨饼”,itemId:222,orderId:456}];
var结果=对象.值(输入.减少((acc,i)=>{
var key=JSON.stringify(i)
返回{
…acc,
[key]:{…i,count:(acc[key]?.count | | 0)+1}
}
},{}));
console.log(结果)