开发者问题收集

如何合并数组中的相同字符串?

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 }
  1. 我循环遍历数组
  2. 我将元素(例如“1kg 胡萝卜”)拆分为重量和项目
  3. 然后我将 1kg 强制转换为整数
  4. 我检查 obj 是否已经具有 item 键,如果没有,我添加它
  5. 如果它已经存在,我只需增加 kgNum
  6. 然后我返回对象

这是一个很好的起点,您可以通过一些额外的工作弄清楚如何添加回 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