首先我很抱歉,因为这可能会非常简单。但是我在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几乎一无所知,但我认为这是正确的方法。
那么如何才能使我的代码工作,以便我可以在需要时接收数据?
答案 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});