如何解决遍历JSON对象并通过唯一的深色属性求和
下面是我的JSON对象(下面只是我感兴趣的值的示例,实际上与成本一起还有很多其他参数) 我正在尝试在expeRSS js中使用下划线
[
{
"Cost":250,"author": { id :"2",name : "Joe",workId: "5" }
},{
"Cost":450,workId: "6" }
},{
"Cost":150,"author": { id :"3",name : "Tam",workId: "7" }
},{
"Cost":250,workId: "8" }
},{
"Cost":350,workId: "9" }
}
]
我希望输出如下
Joe 950
塔姆500
我尝试过:
var iw={};
iw = Object.keys(myJsonObject.reduce((iw,curr) => {
//iw[curr.author.id] = iw[curr.author.id]
iw[curr.author.id].cost += parseInt(curr.cost);
return iw;
},iw)).map(key => iw[key]);
console.log("New ::"+iw);
但是我没有得到我所希望的:
TypeError: Cannot read property 'cost' of undefined
at Object.keys.myJsonObject.reduce (repl:3:7)
at Array.reduce (<anonymous>)
New ::[object Object]
解决方法
可能是一种更清洁的方法,但是简单的forEach可以工作。显然,这里的输出是包含所需结果的对象。
const data = [
{
"Cost":250,"author": { id :"2",name : "Joe",workId: "5" }
},{
"Cost":450,workId: "6" }
},{
"Cost":150,"author": { id :"3",name : "Tam",workId: "7" }
},{
"Cost":250,workId: "8" }
},{
"Cost":350,workId: "9" }
}
]
let a = {};
data.forEach(e => a[e.author.name] ? a[e.author.name] += e.Cost : a[e.author.name] = e.Cost);
console.log(a);
,
如Fraser所说
您的原始代码存在无法检查该用户是否已经存在于iw对象中的问题
您更正的解决方案:
myJsonObject =
[
{
"Cost":250,workId: "9" }
}
]
var iw={};
iw = myJsonObject.reduce((iw,curr) => {
iw[curr.author.name] ? iw[curr.author.name] += curr.Cost : iw[curr.author.name] = curr.Cost;
return iw;
},iw);
console.log(iw);
结果:
{Joe: 950,Tam: 500}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。