我有一个值重复的数组[[Food , quantity]]
,我想在数组中添加相同食物的数量,但是我似乎找不到解决办法
我想使用JavaScript来做到这一点,数组看起来像这样:
[
["Burger", 5],
["Pizza", 10],
["Coke", 13],
["Burger", 7],
["Soda", 10],
["Pizza", 4],
["Burger", 12]
]
我希望结果像这样:
[
["Burger", 24],
["Pizza", 14],
["Coke", 13],
["Soda", 10]
]
然后我想在表上显示结果
答案 0 :(得分:4)
您可以使用reduce
对每种食物进行分组。创建一个累加器,每个food
作为键,数量的总和作为值。如果已添加密钥,请增加密钥。否则,添加数量作为值的键。然后使用Object.entries()
获取食物的二维数组-总数量对
const input=[["Burger",5],["Pizza",10],["Coke",13],["Burger",7],["Soda",10],["Pizza",4],["Burger",12]]
const counter = input.reduce((acc, [food, value]) => {
acc[food] = acc[food] + value || value;
return acc;
}, {});
const ouptut = Object.entries(counter)
console.log(JSON.stringify(ouptut))
这是累加器/计数器对象的样子:
{
"Burger": 24,
"Pizza": 14,
"Coke": 13,
"Soda": 10
}
答案 1 :(得分:0)
您可以尝试-
const arr = [["Burger" , 5], ["Pizza" , 10], ["Coke" , 13], ["Burger" , 7], ["Soda" , 10], ["Pizza" , 4], ["Burger" , 12]];
let ans = [];
arr.map((x) => {
const [name, qty] = x;
const found = ans.find((y) => y[0] === name);
if(found){
found[1] = found[1] + qty;
} else {
ans.push(x);
}
});
console.log(ans);
答案 2 :(得分:0)
您可以尝试一下,
let array = [["Burger" , 5], ["Pizza" , 10], ["Coke" , 13], ["Burger" , 7], ["Soda" , 10], ["Pizza" , 4], ["Burger" , 12]];
let itemObj = {};
for(let item of array){
if(itemObj.hasOwnProperty(item[0]))
itemObj[item[0]] += item[1];
else
itemObj[item[0]] = item[1];
}
console.log(itemObj);
let newArray = Object.keys(itemObj).map(function(key) {
return [key, itemObj[key]];
});
console.log(newArray);