我有一个看起来像这样的对象:
{
"Boiler Emissions": {
"Manhattan": 2.7,
"Bronx": 3.2
},
"Benzene Concentration": {
"Manhattan": 2.1,
"Bronx": 3.5
}
}
我想从两个子对象中计算Manhattan
和Bronx
的值,并获得如下所示的result
:
{
"Manhattan": 4,8,
"Bronx": 6,7
}
如何计算这些嵌套值?
答案 0 :(得分:1)
您只需使用Object.keys()
遍历对象的键并构建您的result
对象。
这应该是你的代码:
var result = {Manhattan: 0, Bronx: 0};
Object.keys(obj).forEach(function(k){
result.Manhattan += obj[k].Manhattan ? obj[k].Manhattan : 0;
result.Bronx+= obj[k].Bronx ? obj[k].Bronx: 0;
});
<强>演示:强>
这是一个有效的演示:
var obj = {
"Boiler Emissions": {
"Manhattan": 2.7,
"Bronx": 3.2
},
"Benzene Concentration": {
"Manhattan": 2,
"Bronx": 3.5
}
};
var result = {Manhattan: 0, Bronx: 0};
Object.keys(obj).forEach(function(k){
result.Manhattan += obj[k].Manhattan ? obj[k].Manhattan : 0;
result.Bronx+= obj[k].Bronx ? obj[k].Bronx: 0;
});
console.log(result);
&#13;
答案 1 :(得分:0)
var obj={
"Boiler Emissions": {
"Manhattan": 2.7,
"Bronx": 3.2
},
"Benzene Concentration": {
"Manhattan": 2,1,
"Bronx": 3.5
}
};
var sums={};
for(values of obj){
for(key in values){
sums[key]= (sums[key]|| 0) + values[key];
}
}
console.log(sums);
简单地遍历主要对象。
答案 2 :(得分:0)
你需要使用过滤器数组方法。
function filterByID(item) {
if (item.CategoryID == viewCategoryProductID) {
return true;
}
return false;
}
这是一个过滤器数组方法,您需要传递数组的项并匹配值,它只返回匹配的值。
我希望它可以帮到你
答案 3 :(得分:0)
const obj = {
"Boiler Emissions": {
"Manhattan": 2.7,
"Bronx": 3.2
},
"Benzene Concentration": {
"Manhattan": 2.1,
"Bronx": 3.5
}
}
const output = Object.keys(obj)
.map(measure => obj[measure])
.reduce(
(sumByCity, measure) => {
Object
.keys(measure)
.map( city => sumByCity[city] = !sumByCity[city] ? measure[city] : sumByCity[city] + measure[city] )
return sumByCity
}
,{})
console.log(output)
代码没有提及任何测量,因此您可以根据需要添加任意数量。如果您需要添加更多城市,那么城市也会发生同样的事情。并非所有测量都需要所有城市。所以,如果你有这样的事情:
const obj = {
"Boiler Emissions": {
"Manhattan": 2.7,
"Bronx": 3.2,
"San Francisco": 3.2
},
"Benzene Concentration": {
"Manhattan": 2.1,
"Bronx": 3.5,
"LA": 1.1
}
}
它仍然会输出正确的结果:
{
Manhattan: 4.800000000000001,
Bronx: 6.7,
San Francisco: 3.2,
LA: 1.1
}
答案 4 :(得分:0)
您可以执行以下操作;
var obj = { "Boiler Emissions" : {"Manhattan": 2.7, "Bronx": 3.2},
"Benzene Concentration": {"Manhattan": 2.1, "Bronx": 3.5}},
res = Object.keys(obj).reduce((r,k) => Object.keys(obj[k]).reduce((o,p) => (o[p] = o[p] + obj[k][p] || obj[k][p], o), r), {});
console.log(res);
&#13;
答案 5 :(得分:0)
我们开始将object-scan用于此类数据处理任务。一旦将头缠住它,它就会非常强大。这是您回答问题的方式
const objectScan = require('object-scan');
const count = (input) => objectScan(['**'], {
filterFn: ({ value, property, context }) => {
if (typeof value === 'number') {
context[property] = (context[property] || 0) + value;
}
}
})(input, {});
const data = {
'Boiler Emissions': {
Manhattan: 2.7,
Bronx: 3.2
},
'Benzene Concentration': {
Manhattan: 2.1,
Bronx: 3.5
}
};
console.log(count(data));
// => { Bronx: 6.7, Manhattan: 4.800000000000001 }