用户将填写一个数据表,然后我需要迭代该表,按他的 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);
}
})
最佳答案
您可以使用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/