添加重复的数组值

时间:2019-06-06 11:56:36

标签: javascript arrays

我有一个值重复的数组[[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]
]

然后我想在表上显示结果

3 个答案:

答案 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);