Javascript 如何减少包含匹配键/值+变体的对象数组?
减少此对象数组以获得所需结果的最佳方法是什么Javascript 如何减少包含匹配键/值+变体的对象数组?,javascript,arrays,Javascript,Arrays,减少此对象数组以获得所需结果的最佳方法是什么 const arr = [ { "id": "561", "count": "1", "month": 7 }, { "id": "561", "count": &q
const arr = [
{
"id": "561",
"count": "1",
"month": 7
},
{
"id": "561",
"count": "1",
"month": 7
},
{
"id": "561",
"count": "-1",
"month": 8
},
{
"id": "561",
"count": "1",
"month": 9
},
{
"id": "561",
"count": "-1",
"month": 9
}
]
正如您所看到的,id匹配和某些月份匹配。我希望实现以下目标:
[
{
"id": "561",
"count": 2
"month": 7
},
{
"id": "561",
"count": -1,
"month": 8
},
{
"id": "561",
"count": 0,
"month": 9
}
]
我基本上是试图按每个id的月份获得总计数。您可以使用Array.prototype.reduce根据id和月份对阵列进行分组和评估
常数arr=[
{
身份证号码:561,
计数:1,
月份:7
},
{
身份证号码:561,
计数:1,
月份:7
},
{
身份证号码:561,
计数:-1,
月份:8
},
{
身份证号码:561,
计数:1,
月份:9
},
{
身份证号码:561,
计数:-1,
月份:9
}
];
const res=Object.valuesarr.reduceac,item=>{
如果acc[`${item.id}-${item.month}`]{
acc[`${item.id}-${item.month}`]={
…acc[`${item.id}-${item.month}`],
计数:`${parseIntacc[`${item.id}-${item.month}`].count+parseIntitem.count}`
}
}否则{
acc[`${item.id}-${item.month}`]=item;
}
返回acc;
}, {};
console.logres 您可以使用Array.prototype.reduce根据id和月份对阵列进行分组和评估
常数arr=[
{
身份证号码:561,
计数:1,
月份:7
},
{
身份证号码:561,
计数:1,
月份:7
},
{
身份证号码:561,
计数:-1,
月份:8
},
{
身份证号码:561,
计数:1,
月份:9
},
{
身份证号码:561,
计数:-1,
月份:9
}
];
const res=Object.valuesarr.reduceac,item=>{
如果acc[`${item.id}-${item.month}`]{
acc[`${item.id}-${item.month}`]={
…acc[`${item.id}-${item.month}`],
计数:`${parseIntacc[`${item.id}-${item.month}`].count+parseIntitem.count}`
}
}否则{
acc[`${item.id}-${item.month}`]=item;
}
返回acc;
}, {};
console.logres 下面是一个使用Array.prototype.reduce创建新数组和Array.prototype.find检查新数组中是否已存在当前值的示例 常数arr=[ { 身份证号码:561, 计数:1, 月份:7 }, { 身份证号码:561, 计数:1, 月份:7 }, { 身份证号码:561, 计数:-1, 月份:8 }, { 身份证号码:561, 计数:1, 月份:9 }, { 身份证号码:561, 计数:-1, 月份:9 } ] const result=arr.reduceac,值=>{ const index=acc.findIndex{id,month}=>id==value.id&&month==value.month; 如果索引>-1{ acc[index]['count']+=Numbervalue.count; } 否则{ acc.push{…值,计数:Numbervalue.count}; } 返回acc; }, []
console.logresult下面是一个使用Array.prototype.reduce创建新数组和Array.prototype.find检查新数组中是否已存在当前值的示例 常数arr=[ { 身份证号码:561, 计数:1, 月份:7 }, { 身份证号码:561, 计数:1, 月份:7 }, { 身份证号码:561, 计数:-1, 月份:8 }, { 身份证号码:561, 计数:1, 月份:9 }, { 身份证号码:561, 计数:-1, 月份:9 } ] const result=arr.reduceac,值=>{ const index=acc.findIndex{id,month}=>id==value.id&&month==value.month; 如果索引>-1{ acc[index]['count']+=Numbervalue.count; } 否则{ acc.push{…值,计数:Numbervalue.count}; } 返回acc; }, []
console.logresultid的561和第7个月应该有2个计数…@RobinMackenzie啊,我错过了问题中的那部分。现在谢谢你的作品,谢谢你的例子!id为561,第7个月应该有2个…@RobinMackenzie啊,我错过了问题中的那部分。现在谢谢你的作品,谢谢你的例子!您正在连接计数值而不是添加…@RobinMackenzie我在解决方案中更新了该部分,我没有看到计数值是一个字符串。这是有效的,谢谢您的示例!您正在连接计数值而不是添加…@RobinMackenzie我在解决方案中更新了该部分,我没有看到计数值是一个字符串。这是有效的,谢谢您的示例!