Javascript将数据总数放入列表中

时间:2017-01-23 15:27:12

标签: javascript arrays

我有这些数据:

{
    "id": "123",
    "name": "name here",
    "thsub": {
        "637": {
            "id": "637",
            "name": "Sub 1",
            "stats": {
                "items": 5,
            },
            "ons": null
        },
        "638": {
            "id": "638",
            "name": "Sub 2",
            "stats": {
                "items": 10,
            },
            "ons": null
        }
    },
    "ph": 10,
}

这里是代码:

mydata = [mydata];

var chList=[];
var thList=[];
var thCount=[];

for (var i = 0; i < mydata.length; i++) {

    var obj = mydata[i];
    var cl = obj.name;
    if (obj.thsub != null) {
        chList.push(cl);
    }

    if(obj.thsub) {
        if (i < 10) {

            var nme = Object.keys(obj.thsub).map( function(key){
                var item = obj.thsub[key];
                return item.name;

            });

            thCount.push(numberofitems);

            thList = thList.concat(nme);
            thCount = thCount.concat(Array(nme.length).fill(nme.length));

        }
    }
}

我的问题在于thCount ...我需要做的是计算每个&#34;项目&#34;在obj.thsub.638或其他... stats.items中,将总数放入thCount,就像我在thList中一样。

所以期望的结果是5和10,换句话说:[5,10]在这种情况下。

thCount将是[5,10]

我该怎么做?

3 个答案:

答案 0 :(得分:0)

您应该使用键值访问json对象,index用于数组。下面的代码只是为你做的事情

        var data = {
        "id": "123",
        "name": "name here",
        "thsub": {
            "637": {
                "id": "637",
                "name": "Sub 1",
                "stats": {
                    "items": 5,
                },
                "ons": null
            },
            "638": {
                "id": "638",
                "name": "Sub 2",
                "stats": {
                    "items": 10,
                },
                "ons": null
            }
        },
        "ph": 10,
    };
    var thCount = [];
    for(key in data.thsub ){
      if(data.thsub[key].stats){
       thCount.push(data.thsub[key].stats.items);
      }
    }
    console.log(thCount);

答案 1 :(得分:0)

Object.values为您提供给定对象的值列表,然后您可以将结果映射到数组中。在ES5中:

var arr = Object.values(mydata.thsub).map(function(item) {
    return item.stats.items
});
ES6中的

const list = Object.values(mydata.thsub).map(item => item.stats.items);

答案 2 :(得分:0)

您可以使用迭代递归方法来获取所需的值。

function getValues(object, key) {

    function iter(o) {
        if (key in o) {
            result.push(o[key]);
        }
        Object.keys(o).forEach(function (k) {
            if (o[k] && typeof o[k] === 'object') {
                iter(o[k]);
            }
        });
    }

    var result = [];
    iter(object);
    return result;
}

var data = { id: "123", name: "name here", thsub: { 637: { id: "637", name: "Sub 1", stats: { items: 5, }, ons: null }, 638: { id: "638", name: "Sub 2", stats: { items: 10, }, ons: null } }, ph: 10, };
  
console.log(getValues(data, 'items'));
.as-console-wrapper { max-height: 100% !important; top: 0; }