微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

遍历JSON对象并通过唯一的深色属性求和

如何解决遍历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 举报,一经查实,本站将立刻删除。