Javascript 计算对象数组中的重复项并按数组或对象键将其分组
我想把每天的所有重复值加起来,并按对象键对它们进行排序Javascript 计算对象数组中的重复项并按数组或对象键将其分组,javascript,arrays,object,foreach,key,Javascript,Arrays,Object,Foreach,Key,我想把每天的所有重复值加起来,并按对象键对它们进行排序 let meals = { 'Sat Jul 11 2020': [{ fruit: "apple" }, { fruit: "apple" }, { fruit: "orange" }, { fruit: "apple" }], 'Sat Jul 04 2020': [{ fruit: "orange"
let meals = {
'Sat Jul 11 2020': [{ fruit: "apple" }, { fruit: "apple" }, { fruit: "orange" }, { fruit: "apple" }],
'Sat Jul 04 2020': [{ fruit: "orange" }, { fruit: "apple" }, { fruit: "orange" }],
'Fri Jul 03 2020': [{ fruit: "orange" }, { fruit: "orange" }, { fruit: "apple" }, { fruit: "orange" }]
}
let keys = Object.keys(meals);
let food = keys.map(item => {
return meals[item].map((x) => {
return x.fruit
});
});
var sorted ={};
food.forEach(i => {
i.map((x) => {
return [sorted[x] = (sorted[x] || 0) + 1];
})
});
我想要的是这样的东西:
'Sat Jul 11 2020': [{apple: 3, oranges: 1}],
'Sat Jul 04 2020': [{apple: 1, oranges: 2}],
'Fri Jul 03 2020': [{apple: 1, oranges: 3}],
我现在得到的是它将所有天数的值相加,而不是按天排序
有什么想法吗?您可以获取对象的条目,并映射新条目以获取对象 在内部,获取值数组并计算结果 这种方法返回一个对象,而不是封装在数组中的对象
let Founds={'Sat Jul 11 2020':[{水果:“苹果”},{水果:“橙色”},{水果:“苹果”},'Sat Jul 04 2020':[{水果:“橙色”},{水果:“苹果”},{水果:“橙色”},'Fri Jul 03 2020':[{水果:“橙色”},{水果:“橙色”},{水果:“苹果”},{水果:“橙色”},
结果=对象。fromEntries(对象
.参赛作品(膳食)
.map([key,values])=>[
钥匙
value.reduce((r,{fruit})=>{
r[水果]=(r[水果]| 0)+1;
返回r;
}, {})
])
);
控制台日志(结果)代码>
.as-console-wrapper{max-height:100%!important;top:0;}
您真正需要的是降低每顿饭的价值。您可以通过Nina Sholz前面所示的方法来实现这一点,也可以使用一个简单的
for of循环来获得每顿饭的价值:
for (const [key, value] of Object.entries(meals)) {
// key is our date string
// value is our array of fruits
}
现在我们有了每个键/值,我们只需要将value
中的水果数组减少为一个对象:
const sorted = {}
for (const [key, value] of Object.entries(meals)) {
sorted[key] = value.reduce((accumulator, current) => {
const fruitOnObj = current.fruit; // "apple" or "orange" in this case
// Add to our property on our sorted constant
accumulator[fruitOnObj] = (accumulator[fruitOnObj] || 0) + 1;
// Return our modified accumulator from the reducer function
return accumulator;
}, {})
}