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

时间:2019-05-14 12:14:57

标签: javascript arrays string

我正在做我的第一个食品轮换项目,该计划从所选的配方成分中列出购物清单。 我设法写了一个loop,它将所有要素组合到一个array中,使我们可以回答我的问题。

我想在数组中合并相同的成分,即:[1kg Carrots, 1kg Spinach, 1kg Carrots],我希望将重复的(1kg Carrots, 1kg Carrots)合并为(2kg Carrots)

有没有办法做到这一点?

对不起,如果我的要求太草率,第一次问一个问题。

我可以这样做,以使它可以消除类似的结果,因为[1kg Carrots, 1kg Carrots]的结果将是[1kg Carrot]

很遗憾,我目前正在上班,并且没有访问权限-会在需要时进行更新。

2 个答案:

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

这是一个很好的起点,您可以弄清楚如何添加回kg :)