我正在尝试使用哈希表,以便我可以选择存储在数组/对象中的特定对象。但是,我在循环对象时遇到问题。
var pins= {};
pins[6] = '6';
pins[7] = '7';
pins[8] = '8';
$('#result3').append('<div>Size: ' + Object.size(pins) + '</div>');
for(var i = 0; i < Object.size(pins); i++) {
$('#result3').append('<div>' + pins[i] + '</div>');
}
JSFiddle :http://jsfiddle.net/7TrSU/
正如您在使用对象TEST 3
存储数据的pin
中所看到的那样,在循环对象undefined
时,我得到pin
。
循环浏览pin
的正确方法是什么?
修改
如果不仅仅是pin[6] = '6'
,我会使pin [6] =一个对象并且我想循环遍历所有id
属性会发生什么?我正在做的实际代码片段......
for(var i = 0; i < json.length; i++) {
markerId = json[i].listing_id
// Place markers on map
var latLng = new google.maps.LatLng(json[i].lat, json[i].lng);
var marker = new google.maps.Marker({
listing_id: markerId,
position: latLng,
icon: base_url + 'images/template/markers/listing.png',
});
markers[markerId] = marker;
}
for(var marker in markers) {
console.log('marker ID: ' + marker.listing_id);
mc.addMarker(marker);
}
上面的console.log
返回undefined,如果我改为console.log(marker)
,我会得到marker.listing_id
的值。对不起,我很困惑!
我设法让它与$.each(markers, function(i, marker){});
一起使用,但为什么上面的for..in
不起作用?
答案 0 :(得分:91)
var hash = {}
hash[key] = value
Object.keys(hash).forEach(function (key) {
var value = hash[key]
// iteration code
})
答案 1 :(得分:42)
不要使用for(i=0; i<size; i++)
循环。相反,使用:
Object.keys(pins)
获取属性列表,并循环显示,或for ( key_name in pins)
与Object.hasOwnProperty
结合使用(以排除继承属性)以遍历属性。第三个测试用例的问题是它读取键0,1和2的值(而不是6,7,8)。
答案 2 :(得分:5)
因为你正在使用jQuery:
jQuery.each(pins, function (name, value) {
$('#result3').append('<div>' + name + "=" + value + '</div>');
});
答案 3 :(得分:3)
答案 4 :(得分:2)
function iterate(obj){
var keys = Object.keys(obj);
for(i in keys){
doSomething(obj[keys[i]].id);
}
}
这会迭代任何对象中所有字段的id
答案 5 :(得分:-1)
pin
从6开始到8,但for循环从0到3循环(对象的长度)。您需要从6循环到6 + the_size_of_the_object
。像这样:
for(var i = 6, len = 6 + Object.size(pins); i < len; i++) {
$('#result3').append('<div>' + pins[i] + '</div>');
}
或类似的东西,这就是我喜欢的:
for( var i = 5; pin = pins[++i]; ) {
$('#result3').append('<div>' + pin + '</div>');
}