我正在做我的第一个食品轮换项目,该计划从所选的配方成分中列出购物清单。
我设法写了一个loop
,它将所有要素组合到一个array
中,使我们可以回答我的问题。
我想在数组中合并相同的成分,即:[1kg Carrots, 1kg Spinach, 1kg Carrots]
,我希望将重复的(1kg Carrots, 1kg Carrots)
合并为(2kg Carrots)
有没有办法做到这一点?
对不起,如果我的要求太草率,第一次问一个问题。
我可以这样做,以使它可以消除类似的结果,因为[1kg Carrots, 1kg Carrots]
的结果将是[1kg Carrot]
。
很遗憾,我目前正在上班,并且没有访问权限-会在需要时进行更新。
答案 0 :(得分:1)
可以分两步完成
var arr = ["1kg Carrots", "1kg Spinach", "1kg Carrots"]
步骤1:计算公斤总数
var arrCount = arr.reduce((ac, val)=> {
var [kg, key] = val.split(' ')
kg = parseFloat(kg)
ac[key] = ac[key]? ac[key]+kg : kg;
return ac
}, {}) // { Carrots: 2, Spinach: 1 }
第2步:将其还原为数组
var out = Object.entries(arrCount).map(([key, kg])=> `${kg}kg ${key}`)
// [2kg Carrots, 1kg Carrots]
答案 1 :(得分:1)
我很可能会从数组中创建一个对象。
const arr = ['1kg Carrots', '1kg Spinach', '1kg Carrots'];
let obj = {};
arr.forEach(element => {
let [kg, item] = element.split(' ');
kgNum = parseInt(kg);
if(Object.keys(obj).includes(item)){
return obj[item] += kgNum;
} else {
obj[item] = kgNum;
}
})
obj
// #=> { Carrots: 2, Spinach: 1 }
obj
是否已经有密钥item
,如果没有,请添加kgNum
这是一个很好的起点,您可以弄清楚如何添加回kg
:)