未定义的对象值和NaN

Object values undefined and NaN

本文关键字:NaN 对象 未定义      更新时间:2023-09-26

我有一个函数可以创建一个值对象,但我在控制台日志中得到了这个:

 x: Array[4]
 0: undefined
 1: NaN
 2: undefined
 3: NaN
 length: 4
 y: Array[4]
 0: undefined
 1: NaN
 2: undefined
 3: NaN
 length: 4

该函数在从json编码的PHP文件创建的对象上循环:

 var sdata = {"4":{"7":["1","7","2","2"]},"3":{"3":["2","8","1","1"]}};

我的功能是:

function populate_collisions(){
gcollision = { 
    x: [],
    y: []    
    };
for(var key in sdata){
    gcollision.x.push( sdata[key][0] );
    gcollision.x.push( sdata[key][0] + (sdata[key][2]-1) );
    gcollision.y.push( sdata[key][1] );
    gcollision.y.push( sdata[key][1] + (sdata[key][3]-1) );
}
console.log(gcollision);
}

我很好奇为什么我变得不明确和NaN?我该如何解决这个问题?

您的"对象/阵列混合"是3D的(3层深)。

var sdata = {
    "4": {                       
        "7": ["1", "7", "2", "2"]
    },
    "3": {
        "3": ["2", "8", "1", "1"]
    }
};

在第一个项目中,您得到了键"4",然后在它下面,一个键"7",然后是您的数组。你缺少一个额外的循环:

function populate_collisions() {
    gcollision = {
        x: [],
        y: []
    };
    for (var key in sdata) {
        for (var keyTwo in sdata[key]) {
            gcollision.x.push(sdata[key][keyTwo][0]);
            gcollision.x.push(sdata[key][keyTwo][0] + (sdata[key][keyTwo][2] - 1));
            gcollision.y.push(sdata[key][keyTwo][1]);
            gcollision.y.push(sdata[key][keyTwo][1] + (sdata[key][keyTwo][3] - 1));
        }
    }
    console.log(gcollision);
}