首先,我很抱歉,因为这可能非常简单。但是我在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几乎一无所知,但是我认为这是正确的方法。
那么如何使我的代码起作用,以便在需要时可以接收数据?
在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循环或aforEach
是首选。有关更多信息,请参考此问题。
看来您是在手动生成增量密钥。取而代之的是,您可能更喜欢使用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});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句