JavaScript计算嵌套对象中的值
我有一个像这样的对象:JavaScript计算嵌套对象中的值,javascript,json,loops,object,Javascript,Json,Loops,Object,我有一个像这样的对象: { "Boiler Emissions": { "Manhattan": 2.7, "Bronx": 3.2 }, "Benzene Concentration": { "Manhattan": 2.1, "Br
{
"Boiler Emissions": {
"Manhattan": 2.7,
"Bronx": 3.2
},
"Benzene Concentration": {
"Manhattan": 2.1,
"Bronx": 3.5
}
}
{
"Manhattan": 4,8,
"Bronx": 6,7
}
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
和Bronx
的值,得到一个结果,如下所示:
{
"Boiler Emissions": {
"Manhattan": 2.7,
"Bronx": 3.2
},
"Benzene Concentration": {
"Manhattan": 2.1,
"Bronx": 3.5
}
}
{
"Manhattan": 4,8,
"Bronx": 6,7
}
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
}
}
如何计算这些嵌套值
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);
只需在主对象上迭代。您只需使用object.keys()
在对象的键上循环,然后构建结果
对象
这是您的代码应该如何编写的:
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={
“锅炉排放物”:{
“曼哈顿”:2.7,
“布朗克斯”:3.2
},
“苯浓度”:{
“曼哈顿”:2,
“布朗克斯”:3.5
}
};
var result={Manhattan:0,Bronx:0};
Object.keys(obj.forEach)(函数(k){
结果.Manhattan+=obj[k]。曼哈顿?obj[k]。曼哈顿:0;
result.Bronx+=obj[k]。Bronx?obj[k]。Bronx:0;
});
控制台日志(结果)代码>您需要使用过滤器数组方法
function filterByID(item) {
if (item.CategoryID == viewCategoryProductID) {
return true;
}
return false;
}
这是一个过滤器数组方法,您需要传递数组项和匹配值,它只返回匹配值
我希望它能帮助你
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)
代码中没有提到任何度量值,因此您可以添加任意数量的度量值。同样的事情也会发生在城市中,以防你不得不增加更多的城市。并不是所有的测量都需要所有的城市。所以如果你有这样的东西:
{
"Boiler Emissions": {
"Manhattan": 2.7,
"Bronx": 3.2
},
"Benzene Concentration": {
"Manhattan": 2.1,
"Bronx": 3.5
}
}
{
"Manhattan": 4,8,
"Bronx": 6,7
}
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
}
你可以这样做
var obj={“锅炉排放”:{“曼哈顿”:2.7,“布朗克斯”:3.2},
“苯浓度”:{“曼哈顿”:2.1,“布朗克斯”: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),{});
控制台日志(res)代码>我们开始使用它来执行这样的数据处理任务。只要你把头绕在它身上,它就会非常强大。下面是你如何回答你的问题
//const objectScan=require('object-scan');
常量计数=(输入)=>objectScan(['**']{
filterFn:({value,property,context})=>{
如果(值的类型=='number'){
上下文[属性]=(上下文[属性]| | 0)+值;
}
}
})(输入,{});
const数据={‘锅炉排放’:{曼哈顿:2.7,布朗克斯:3.2},'苯浓度:{曼哈顿:2.1,布朗克斯:3.5};
console.log(计数(数据));
//=>{Bronx:6.7,曼哈顿:4.8000000000001}
。作为控制台包装{最大高度:100%!重要;顶部:0}
此问题中没有JSON。您正在谈论Javascript对象。Read:Related to:我在运行此代码时遇到以下错误:“undefined不是函数”。在“for(obj的值)”行中。@user7431590要么obj未正确包含,要么您使用的是旧浏览器