Javascript 检查重复项并添加重复的 id

标签 javascript arrays

我有以下数组

const prod = [
  {name:'Test1',vals:[12]},
  {name:'Test1', vals:[14]},
  {name:'Test2', vals:[19]}
   //other array items
 ]

我想做的是将两个 Test1 组合成一个 vals 数组,这样最终的数组就会有

 const finalprod = [
  {name:'Test1',vals:[12,14]},
  {name:'Test2', vals:[19]}
   //other array items
 ]

所以我试过了

    prod.forEach(item=>{
      //check if name is contained in the array -am stuck here
   });

我对如何进行感到困惑。我如何继续获取最终数组?

最佳答案

使用reduce代替forEach,查找累加器中的项,如果存在则将vals与当前元素的值合并,否则就将其插入累加器:

const prod = [
  {name:'Test1',vals:[12]},
  {name:'Test1', vals:[14]},
  {name:'Test2', vals:[19]}   
 ]

const finalprod = prod.reduce((acc, curr) => {
  const ndx = acc.findIndex(e => e.name === curr.name);

  if (ndx > -1)
    acc[ndx].vals = [...acc[ndx].vals, ...curr.vals];
  else
    acc.push(curr);

  return acc;
}, []);

console.log(finalprod);

关于Javascript 检查重复项并添加重复的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57794781/

相关文章:

javascript - 获取数据时无法动态添加行 javascript

ios - 如何在 Swift 中将 JSON 数组解析为数组

JavaScript indexOf() - 如何获取特定索引

javascript - PUPPETEER - 循环内的随机设置超时不起作用

javascript - 替换chartjs数据

php - 计算返回空的数组中的值

android - 发送字节[]到服务器,outOfMemoryError

java - 将字符串修改应用于数组/列表

c++ - 创建结构实例数组,然后在传递对象数组(指针)的其他结构中调用函数

javascript - 自定义 Angular Directive(指令)不适用于动态图像