JS循环遍历对象

时间:2014-06-06 12:58:50

标签: javascript arrays object

首先我很抱歉,因为这可能会非常简单。但是我在PHP中工作很多,但是这种语法在JS中不起作用。

我有以下几段代码:

var rangeArr = [];

// This piece is inside an loop of adding elements...
rangeArr[row_id] = {"row_x": row_x, "row_y": row_y, "row_name": row_name, "row_dir": row_dir, "row_length": row_length, "row_height": row_height};
        row_id++;

我会得到这个对象(从Chrome控制台获取):

rangeArr
[undefined × 1, 
Object
    row_dir: "lr"
    row_height: "6"
    row_length: "5"
    row_name: ""
    row_x: 45
    row_y: 71
    __proto__: Object
    , 
Object
    row_dir: "lr"
    row_height: "6"
    row_length: "6"
    row_name: ""
    row_x: 95
    row_y: 208
    __proto__: Object
]

我正在使用以下代码循环遍历对象数组:

for (var item in rangeArr) {
    if(typeof(item) !== 'undefined'){
        console.log(item.row_x);
    }
}

但我只得到未定义的错误......当我查看控制台日志时,整个item仅包含row_id。这意味着只检索索引,而不是对象本身。

正如我之前所说,我对JS Objects几乎一无所知,但我认为这是正确的方法。

那么如何才能使我的代码工作,以便我可以在需要时接收数据?

1 个答案:

答案 0 :(得分:2)

for in循环中,item实际上是数组键,而不是数组元素值。要获取对象,请使用rangeArr[item]

for (var item in rangeArr) {
    var obj = rangeArr[item];
    if(typeof(obj) !== 'undefined'){
        console.log(obj.row_x);
    }
}

那就是说,for in循环对数组来说是个坏主意。循环的基本增量,或forEach是首选。有关详细信息,请参阅this question


看起来您手动生成增量键。而不是那样,您可能更喜欢使用Array.prototype.push()

rangeArr.push({"row_x": row_x, "row_y": row_y, "row_name": row_name, "row_dir": row_dir, "row_length": row_length, "row_height": row_height});