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

Javascript 如何在数组中组合相同的字符串?,javascript,arrays,string,Javascript,Arrays,String,我正在做我的第一个项目,作为一个食品代理,从所选择的食谱成分中拿出一份购物清单。 我成功地编写了循环,它将所有成分组合在一个数组中,从而引出我的问题 我想在数组中组合相同的成分,即:[1kg胡萝卜,1kg菠菜,1kg胡萝卜],我想将重复的(1kg胡萝卜,1kg胡萝卜)组合成(2kg胡萝卜) 有办法做到这一点吗 对不起,如果我的要求是草率的,第一次问问题 我可以计算它,这样它就可以抵消类似的结果,因为[1kg胡萝卜,1kg胡萝卜]的结果将是[1kg胡萝卜] 不幸的是,我目前正在工作,没有访问权限-

我正在做我的第一个项目,作为一个食品代理,从所选择的食谱成分中拿出一份购物清单。 我成功地编写了
循环
,它将所有成分组合在一个
数组中
,从而引出我的问题

我想在数组中组合相同的成分,即:
[1kg胡萝卜,1kg菠菜,1kg胡萝卜]
,我想将重复的
(1kg胡萝卜,1kg胡萝卜)
组合成
(2kg胡萝卜)

有办法做到这一点吗

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

我可以计算它,这样它就可以抵消类似的结果,因为
[1kg胡萝卜,1kg胡萝卜]
的结果将是
[1kg胡萝卜]


不幸的是,我目前正在工作,没有访问权限-将在需要时进行更新。

这可以通过两个步骤完成

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] 

可以分两步完成

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] 

我很可能会从数组中创建一个对象

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
    是否已经有
    项的键,如果没有,我添加它
  • 如果它已经存在,我只需增加
    kgNum
  • 然后我返回对象

  • 这是一个很好的起点,您可以通过更多的工作了解如何添加回
    kg
    :)

    我很可能会从数组创建一个对象

    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
    是否已经有
    项的键,如果没有,我添加它
  • 如果它已经存在,我只需增加
    kgNum
  • 然后我返回对象

  • 这是一个很好的起点,您可以通过更多的工作了解如何添加回
    kg
    :)

    欢迎使用StackOverflow!为了帮助您,我们需要查看您的代码。欢迎使用堆栈溢出!请拿着(你得到了一个徽章!),四处看看,仔细阅读,特别是我还推荐Jon Skeet's和。答案将引导您走向正确的方向。欢迎来到StackOverflow!为了帮助您,我们需要查看您的代码。欢迎使用堆栈溢出!请拿着(你得到了一个徽章!),四处看看,仔细阅读,特别是我还推荐Jon Skeet's和。答案会让你走上正确的方向。谢谢,我一到家就会试试这个,并会让你知道结果。看起来这肯定会解决我的问题,不过(我不一定需要kg部件,我可以假设:)谢谢,我一到家就会试试这个,并会告诉你结果。看起来这肯定会解决我的问题(我不一定需要kg部件,我可以假设:)