我正在尝试填充图表,因此我将数据分为2个列表以进行此操作。

这是数据:

var data = [{
    "id": "622",
    "name": "some name",
    "boats": {
        "637": {
            "id": "637",
            "name": " Subcat 1",
            "translations": null
        },
        "638": {
            "id": "638",
            "name": "Subcat 2",
            "translations": null
        }
    },
    "image": "73e043a7fae04b55855bede22da6286b"
}];


我正在运行此代码以填充列表:

var chList = [];
var boatList = [];
var boatCount = [];


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

    var obj = data[i];

    var cl = obj.name + " [" + obj.id + "]";

    if (obj.boats != null) {
        chList.push(cl);
    }

    if(obj.boats) {

        var nme = obj.boats.map( function(item){
            return item.name;
        });

        boatList = boatList.concat(nme);
        boatCount.push(nme.length);

    }

}

console.log(boatList);
console.log(boatCount);


我的问题是我不断得到:

TypeError:obj.boats.map不是函数

我怎样才能解决这个问题?

注意:数据实际上是这样的:

{
    "id": "622",
    "name": "some name",
    "boats": {
        "637": {
            "id": "637",
            "name": " Subcat 1",
            "translations": null
        },
        "638": {
            "id": "638",
            "name": "Subcat 2",
            "translations": null
        }
    },
    "image": "73e043a7fae04b55855bede22da6286b"
};


但是我在其中添加了[和],以便使用data.length以及列表中也为空的...然后我将这些数据保持原样吗?

最佳答案

问题在于obj.boats是一个对象,而不是数组,因此没有map方法。

尝试以下方法:

Object.keys(obj.boats).map(function(k) { return obj.boats[k].name; });


MDN

10-04 21:41
查看更多