javascript - 检查 jquery 对象数组是否匹配键。 += value 如果匹配,如果不匹配则推送新对象

标签 javascript jquery arrays

用户将填写一个数据表,然后我需要迭代该表,按他的 id 分组并确保每个组 == 100。

我的计划是遍历表行,生成键:值对象,检查数组中是否有匹配的键。如果键匹配,则将值添加到现有数组对象。如果不匹配,则推送新项目。

假设这个数组:

var gidArr =
[
    {   
        gid: '123',
        ratio: '20'
    },
    {   
        gid: '123',
        ratio: '40'
    },
    {   
        gid: '432',
        ratio: '50'
    },

]  

结果应该是:

{ gid:123, ratio:60 },
{ gid:432, ration: 50}

我尝试过的一些事情:

function GIDRatio(gid, ratio) {
    this.gid = gid;
    this.ratio = parseFloat(ratio);
}
        var item = new GIDRatio(gid, ratio);

1:
        if(gid in gidArr) {
            gidArr.ratio += item.ratio;
        } else {
            gidArr.push(item);
        }

2:

    $.each(gidArr, function(i, v) {
        if(v.gid === item.gid) {
             v.ratio += item.ratio;
        } else {
             gisArr.push(item);
        }
    })

fiddle :https://jsfiddle.net/8vw4eehs/11/

最佳答案

您可以使用Array.reduce 方法将原始数组转换为新结构。

在您的 reduce 函数中,只需检查 acc 即您的 accumulated array 是否有 gid 已经可用。如果不是,则插入数组。如果是,则计算 ratio 的总和并更新 ratio

var gidArr =
[
    {   
        gid: '123',
        ratio: '20'
    },
    {   
        gid: '123',
        ratio: '40'
    },
    {   
        gid: '432',
        ratio: '50'
    },

];

const newArr = gidArr.reduce((acc, cur) => {
  if(acc.some(x => x.gid === cur.gid)) {
    acc.map(x => {
      if(x.gid === cur.gid) {
        x.ratio = (+x.ratio) + (+cur.ratio);
      }
      return x;
    });
  } else {
    acc.push(cur);
  }
  return acc;
},[])

console.log(newArr);

关于javascript - 检查 jquery 对象数组是否匹配键。 += value 如果匹配,如果不匹配则推送新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45552268/

相关文章:

c++ - vector 超出范围,但为什么?

javascript - UI5 - 如何调整堆积条形图中条形的高度

javascript - IEWebGL插件Three.js

Javascript "Show/Hide",非常简单,多平台/浏览器

javascript - 幻灯片上的图像向下跳跃

同一页面中的 Javascript 和 JQuery

javascript - 带有 Material-UI 的 ReactJS : How to sort an array of Material-UI's <TableRow> alphabetically?

arrays - 在 swift 中调用实例方法 'append' 时没有完全匹配

javascript - 页面错误($.plot 不是函数)

javascript - RxJS 运算符在完成之前不会再次发送到内部可观察对象