如何合并数组中的相同字符串?
2019-05-14
139
我正在制作我的第一个项目,即食物轮换表,根据所选的食谱原料提供购物清单。
我设法编写了
循环
,将所有成分组合到一个
数组
中,然后转到我的问题。
我想将数组中的相同成分组合起来,即:
[1kg 胡萝卜, 1kg 菠菜, 1kg 胡萝卜]
,我希望它将重复的
(1kg 胡萝卜, 1kg 胡萝卜)
组合成
(2kg 胡萝卜)
有办法吗?
抱歉,我的请求很草率,这是我第一次提问。
我可以这样做,这样它就会取消类似的,因为
[1kg 胡萝卜, 1kg 胡萝卜]
的结果将是
[1kg 胡萝卜]
。
不幸的是,我目前正在工作,无法访问 - 如果有的话,我会更新需要。
2个回答
我最有可能从数组中创建一个对象。
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 }
- 我循环遍历数组
- 我将元素(例如“1kg 胡萝卜”)拆分为重量和项目
- 然后我将 1kg 强制转换为整数
-
我检查
obj
是否已经具有item
键,如果没有,我添加它 -
如果它已经存在,我只需增加
kgNum
- 然后我返回对象
这是一个很好的起点,您可以通过一些额外的工作弄清楚如何添加回
kg
:)
Bryan
2019-05-14
可分 2 步完成
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]
Harish
2019-05-14