Javascript复杂对象中项目的总和

时间:2017-01-23 17:01:29

标签: javascript

我有一些我正在计算的数据并将总数放入数组中。

以下是数据和代码:

Added package 'NEST.1.9.1' to folder ...
Added package 'FluentAssertions.4.17.0'....
...
C:\Program Files (x86)\MSBuild\12.0\bin\amd64\MSBuild.exe /nologo /noconsolelogger "C:\Builds\10\IW_****\Dev\src\Solution123.All.sln" /nr:False /fl

出于某种原因,“thCount”返回[5,5],结果应为: [10,25]

代码哪里出错了?

3 个答案:

答案 0 :(得分:1)

您的问题的正确代码如下所示:

**var count = [];
for(var i = 0; i < data.cars.length; i++){
   countSum = 0;     
   for(key in data.cars[i].thsub){
            countSum = countSum + data.cars[i].thsub[key].stats.items;
    }   
    count.push(countSum); 
}**

试试此代码,将解决您的问题。

答案 1 :(得分:0)

你需要在汽车上进行另一个循环。

var data = {
  "cars": [{
      "id": "1",
      "name": "name 1",
      "thsub": [{
        "id": "11",
        "name": "sub 1",
        "stats": {
          "items": 5,
        },
        "ions": null
      }, {
        "id": "22",
        "name": "sub 2",
        "stats": {
          "items": 5,
        },
        "translations": null
      }],
      "image": null
    },

    {
      "id": "2",
      "name": "name 2",
      "thsub": [{
        "id": "33",
        "name": "sub 43",
        "stats": {
          "items": 20,
        },
        "ions": null
      }, {
        "id": "44",
        "name": "sub 76",
        "stats": {
          "items": 5,
        },
        "translations": null
      }],
      "image": null
    }
  ]
}



var thCount = [];

for (var l = 0, m = data.cars.length; l < m; l++) {
  thCount[l] = 0;
  for (var i = 0, j = data.cars[l].thsub.length; i < j; i++) {
    if (data.cars[l].thsub[i].stats) {
      thCount[l]+=data.cars[l].thsub[i].stats.items;
    }
  }
}

console.log(thCount);

答案 2 :(得分:0)

您应该使用reduce()map()种方法。使用callback函数时,请使用此方法。

  

reduce()方法对累加器和每个都应用一个函数   数组的值(从左到右)将其减少为单个   值。

     

map()方法创建一个新数组,其中包含调用a的结果   为此数组中的每个元素提供了函数。

var result=data.cars.map(function(item){
     return item.thsub.reduce(function(a, b) { return a.stats.items + b.stats.items; });
});

var data = {
    "cars": [
        {
            "id": "1",
            "name": "name 1",
            "thsub": [
                {
                    "id": "11",
                    "name": "sub 1",
                    "stats": {
                        "items": 5,
                    },
                    "ions": null
                },
                {
                    "id": "22",
                    "name": "sub 2",
                    "stats": {
                        "items": 5,
                    },
                    "translations": null
                }
            ],
            "image": null
        },

        {
            "id": "2",
            "name": "name 2",
                        "thsub": [
                {
                    "id": "33",
                    "name": "sub 43",
                    "stats": {
                        "items": 20,
                    },
                    "ions": null
                },
                {
                    "id": "44",
                    "name": "sub 76",
                    "stats": {
                        "items": 5,
                    },
                    "translations": null
                }
            ],
            "image": null
        }
    ]
}
console.log(data.cars.map(function(item){
  return item.thsub.reduce(function(a, b) { return a.stats.items + b.stats.items; });
}));