Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript计算嵌套对象中的值_Javascript_Json_Loops_Object - Fatal编程技术网

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未正确包含,要么您使用的是旧浏览器