51

我正在尝试使用哈希表,因此我可以选择存储在数组/对象中的特定对象。但是,我在循环对象时遇到问题。

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,使用 objectpin来存储数据,我undefined在遍历 object 时得到了pin

循环的正确方法是什么pin

编辑

如果pin[6] = '6'我制作 pin[6] = 一个对象而不是 just ,并且我想遍历它们的所有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上面返回未定义,如果我这样做,console.log(marker)我会得到marker.listing_id. 对不起,我越来越糊涂了!

我设法让它工作,$.each(markers, function(i, marker){});但为什么for..in上述不起作用?

4

6 回答 6

104
var hash = {}
hash[key] = value

Object.keys(hash).forEach(function (key) { 
    var value = hash[key]
    // iteration code
})
于 2012-04-08T11:10:01.990 回答
50

不要使用for(i=0; i<size; i++)循环。相反,使用:

  1. Object.keys(pins)获取属性列表,并遍历它,或者
  2. 将 afor ( key_name in pins)Object.hasOwnProperty(排除继承属性)结合使用以遍历属性。

第三个测试用例的问题是它读取键 0、1 和 2 的值(而不是 6、7、8)。

于 2012-04-08T11:09:33.730 回答
6

由于您使用的是 jQuery:

jQuery.each(pins, function (name, value) {
    $('#result3').append('<div>' + name + "=" + value + '</div>');
});
于 2012-04-08T11:10:11.803 回答
4
function iterate(obj){
    var keys = Object.keys(obj);
    for(i in keys){
        doSomething(obj[keys[i]].id);
    }
}

这会遍历id任何对象中的所有字段

于 2012-04-08T11:52:53.463 回答
4

尝试这个:

for (var pin in pins) {
    $('#result3').append('<div>' + pin + '</div>');
}

示例小提琴

于 2012-04-08T11:11:12.800 回答
-1

pin6 到 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>');
}
于 2012-04-08T11:09:54.550 回答