Javascript数据列表显示为空,但控制台中没有错误

Javascript数据列表显示为空,但控制台中没有错误,javascript,Javascript,我用一些数据创建了两个数组 控制台没有给我任何错误,但是列表都是空的 这是数据 mydata = { "id": "661", "name": "some name", "description": "some desc", "subcat": { "662": { "id": "662", "name": "sub 1", "translations": null

我用一些数据创建了两个数组

控制台没有给我任何错误,但是列表都是空的

这是数据

mydata = {
    "id": "661",
    "name": "some name",
    "description": "some desc",
    "subcat": {
        "662": {
            "id": "662",
            "name": "sub 1",
            "translations": null
        },
        "663": {
            "id": "663",
            "name": "sub 2",
            "translations": null
        }
    },
    "image": null
};
代码如下:

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

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

    var obj = mydata[i];

    var cl = obj.name;

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

    if(obj.subcat) {

        if (i < 10) {

            var nme = obj.subcat.map( function(item){
                return item.name;
                console.log(nme);
            });

            thList = thList.concat(nme);
            thCount.push(nme.length);
        }

    }

}

console.log(thList);
console.log(thCount);
chList=[];
thList=[];
thCount=[];
对于(var i=0;i
问题是thList和thCount都是这样空出来的:[]


如何更正此问题?

mydata。当您试图访问对象
mydata
上不存在的
length
属性时,未定义长度。因此,循环迭代永远不起作用,因此数组
thList,thCount
总是空的

length
属性存在于Javascript中的数组中,当您尝试访问不属于该对象的任何属性时,Javascript返回
undefined

如果您试图获取对象的属性,那么可以尝试迭代可枚举属性,如

for (var property in mydata ) {
    if (mydata.hasOwnProperty(property)) {
        // Rest of your statements
    }
}

另外,像
var obj=mydata[i]这样的语句在您的情况下不起作用,因为
mydata
不是数组。如果将
mydata
定义为数组,则语句
var obj=mydata[i]可以工作。

mydata。当您试图访问对象
mydata
上不存在的
length
属性时,未定义长度。因此,循环迭代永远不起作用,因此数组
thList,thCount
总是空的

length
属性存在于Javascript中的数组中,当您尝试访问不属于该对象的任何属性时,Javascript返回
undefined

如果您试图获取对象的属性,那么可以尝试迭代可枚举属性,如

for (var property in mydata ) {
    if (mydata.hasOwnProperty(property)) {
        // Rest of your statements
    }
}

另外,像
var obj=mydata[i]这样的语句在您的情况下不起作用,因为
mydata
不是数组。如果将
mydata
定义为数组,则语句
var obj=mydata[i]可以工作。

尝试这样做

for (var key in yourobject) {
    // and access your data like this 
    yourobject[key].whatever
}

试试这样做

for (var key in yourobject) {
    // and access your data like this 
    yourobject[key].whatever
}

如果要获取mydata的长度,请使用Object.keys方法

var length = Object.keys(mydata);

如果要获取mydata的长度,请使用Object.keys方法

var length = Object.keys(mydata);

看起来您希望
mydata
是一个对象数组,而不仅仅是您展示的对象。如果将所显示的
mydata
对象文本包装在数组中,并可能添加其他类似对象,则代码将运行得更好

其次,
obj.subcat.map
将不起作用,因为
subcat
也不是数组。您应该改为将
map
应用于
Object.keys(obj.subcat)
,然后通过获得的键访问
obj.subcat

通过这两种调整,它可以工作:

//mydata是一个数组
mydata=[{
“id”:“661”,
“名字”:“某个名字”,
“描述”:“一些描述”,
“子类别”:{
"662": {
“id”:“662”,
“名称”:“子1”,
“翻译”:空
},
"663": {
“id”:“663”,
“名称”:“子2”,
“翻译”:空
}
},
“图像”:空
}];
var chList=[];
var thList=[];
var-thCount=[];
对于(var i=0;iconsole.log(thCount)看起来您希望
mydata
是一个对象数组,而不仅仅是您展示的对象。如果将所显示的
mydata
对象文本包装在数组中,并可能添加其他类似对象,则代码将运行得更好

其次,
obj.subcat.map
将不起作用,因为
subcat
也不是数组。您应该改为将
map
应用于
Object.keys(obj.subcat)
,然后通过获得的键访问
obj.subcat

通过这两种调整,它可以工作:

//mydata是一个数组
mydata=[{
“id”:“661”,
“名字”:“某个名字”,
“描述”:“一些描述”,
“子类别”:{
"662": {
“id”:“662”,
“名称”:“子1”,
“翻译”:空
},
"663": {
“id”:“663”,
“名称”:“子2”,
“翻译”:空
}
},
“图像”:空
}];
var chList=[];
var thList=[];
var-thCount=[];
对于(var i=0;i