javascript - JS循环遍历对象

标签 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 对象知之甚少,但我认为这是执行此操作的正确方法。

那么我怎样才能让我的代码正常工作,以便我可以在需要时接收数据?

最佳答案

在您的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 循环在数组上不是一个好主意。首选基本增量 for 循环或 forEach。引用this question了解更多信息。


看起来您正在手动生成增量 key 。相反,您可能更喜欢使用 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});

关于javascript - JS循环遍历对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24082440/

相关文章:

javascript - jQuery:重构为函数

c++ - 取消引用一个指向数组类型的结束指针

javascript - AngularJS 不创建新对象

c++如何创建一个指针,即使对象被覆盖也会持续存在?

arrays - Swift - 按另一个数组的属性对对象数组进行排序

javascript - 调用javascript函数时出错: ReferenceError: <function name> is not defined

javascript - 按元素对数据数组进行分组和求和

arrays - Arduino - 高效地迭代 C 数组

javascript - 更改 Javascript cookies 重定向

ruby - 如何在 Ruby 中访问数组的属性