javascript中JSON对象的求和值
我有一个API,它返回如下数据:javascript中JSON对象的求和值,javascript,json,grouping,Javascript,Json,Grouping,我有一个API,它返回如下数据: { "attributes": { "type": "Opportunity" }, "Amount": 175.36, "Owner": { "attributes": { "type": "User" }, "Name": "Steve Knight"
{
"attributes": {
"type": "Opportunity"
},
"Amount": 175.36,
"Owner": {
"attributes": {
"type": "User"
},
"Name": "Steve Knight"
}
},
{
"attributes": {
"type": "Opportunity"
},
"Amount": 6800,
"Owner": {
"attributes": {
"type": "User"
},
"Name": "Bob Smith"
}
}
etc...
这些代表机会,因此每个销售人员都有多个机会。我试图返回一个对象,该对象对每个销售人员的金额进行求和,并返回如下内容:
{Steve Knight: 5590, Bob Smith: 98722, John Jones: 12347893}
我曾尝试按所有者名称对对象进行分组,但我不确定如何将金额相加
var groupBy = require('lodash.groupby');
var grouped = groupBy(data, function(x) {
return x.Owner.Name;
});
您可以在下面尝试:
let output = {}
data.map(function (item) {
if (output.hasOwnProperty(item.Owner.Name)) {
output[item.Owner.Name] = item.Amount;
} else {
output[item.Owner.Name] += item.Amount;
}
});
您可以在下面尝试:
let output = {}
data.map(function (item) {
if (output.hasOwnProperty(item.Owner.Name)) {
output[item.Owner.Name] = item.Amount;
} else {
output[item.Owner.Name] += item.Amount;
}
});
最好使用Array.prototype方法
控制台。清除;
作用{
严格使用;
函数reducecoll、elem、idx、arr{
coll[elem.Owner.Name]=coll[elem.Owner.Name]| | 0;
coll[elem.Owner.Name]+=elem.Amount
返回coll;
}
常数数据=[
{
属性:{
类型:机遇
},
金额:175.36,
所有者:{
属性:{
类型:用户
},
姓名:史蒂夫·奈特
}
},
{
属性:{
类型:机遇
},
金额:100.16,
所有者:{
属性:{
类型:用户
},
姓名:无名氏
}
},
{
属性:{
类型:机遇
},
金额:6.00,
所有者:{
属性:{
类型:用户
},
姓名:无名氏
}
},
{
属性:{
类型:机遇
},
金额:101.65,
所有者:{
属性:{
类型:用户
},
姓名:史蒂夫·奈特
}
},
{
属性:{
类型:机遇
},
金额:6800,
所有者:{
属性:{
类型:用户
},
姓名:鲍勃·史密斯
}
}
];
const reducedata=data.reducereduce,{}
console.logreducedata
}; 最好使用Array.prototype方法
控制台。清除;
作用{
严格使用;
函数reducecoll、elem、idx、arr{
coll[elem.Owner.Name]=coll[elem.Owner.Name]| | 0;
coll[elem.Owner.Name]+=elem.Amount
返回coll;
}
常数数据=[
{
属性:{
类型:机遇
},
金额:175.36,
所有者:{
属性:{
类型:用户
},
姓名:史蒂夫·奈特
}
},
{
属性:{
类型:机遇
},
金额:100.16,
所有者:{
属性:{
类型:用户
},
姓名:无名氏
}
},
{
属性:{
类型:机遇
},
金额:6.00,
所有者:{
属性:{
类型:用户
},
姓名:无名氏
}
},
{
属性:{
类型:机遇
},
金额:101.65,
所有者:{
属性:{
类型:用户
},
姓名:史蒂夫·奈特
}
},
{
属性:{
类型:机遇
},
金额:6800,
所有者:{
属性:{
类型:用户
},
姓名:鲍勃·史密斯
}
}
];
const reducedata=data.reducereduce,{}
console.logreducedata
}; 如果键名存在,则将现有值累加到新值,否则只需添加初始值和名称 常数arr=[{ 属性:{ 类型:机遇 }, 金额:175.36, 所有者:{ 属性:{ 类型:用户 }, 姓名:史蒂夫·奈特 } }, { 属性:{ 类型:机遇 }, 金额:100, 所有者:{ 属性:{ 类型:用户 }, 姓名:史蒂夫·奈特 } }, { 属性:{ 类型:机遇 }, 金额:6800, 所有者:{ 属性:{ 类型:用户 }, 姓名:鲍勃·史密斯 } } ] const result=arr.reduceac,x=>{ const key=x.Owner.Name; 常量金额=x[“金额”]; 如果!acc[键]{ acc[键]=金额; }否则{ acc[键]=acc[键]+金额; } 返回acc; }, {};
如果key name存在,则将已有值累加到新值中,否则只需添加初始值和名称 常数arr=[{ 属性:{ 类型:机遇 }, 金额:175.36, 所有者:{ 属性:{ 类型:用户 }, 姓名:史蒂夫·奈特 } }, { 属性:{ 类型:机遇 }, 金额:100, 所有者:{ 属性:{ 类型:用户 }, 姓名:史蒂夫·奈特 } }, { 属性:{ 类型:机遇 }, 金额:6800, 所有者:{ 属性:{ 类型:用户 }, 姓名:鲍勃·史密斯 } } ] const result=arr.reduceac,x=>{ const key=x.Owner.Name; 常量金额=x[“金额”]; 如果!acc[键]{ acc[键]=金额; }否则{ acc[键]=acc[键]+金额; } 返回acc; }, {};
console.logresult看看这个:看看这个:你为什么写acc={…acc[key]:amount}而不是简单的acc[key]=amount?@rplantiko你是对的,只是因为变异了
ate有时,它对性能没有任何影响,垃圾收集器的工作也很好。你是说state你为什么写acc={…acc[key]:amount}而不是简单的acc[key]=amount?@rplantiko你是对的,只是因为有时会改变sate而使用它,不管怎样,它都不会影响性能,垃圾回收器的工作做得很好