迭代对象哈希表

时间:2012-04-08 11:06:16

标签: javascript hashtable

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

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不起作用?

6 个答案:

答案 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++)循环。相反,使用:

  1. Object.keys(pins)获取属性列表,并循环显示,或
  2. for ( key_name in pins)Object.hasOwnProperty结合使用(以排除继承属性)以遍历属性。
  3. 第三个测试用例的问题是它读取键0,1和2的值(而不是6,7,8)。

答案 2 :(得分:5)

因为你正在使用jQuery:

jQuery.each(pins, function (name, value) {
    $('#result3').append('<div>' + name + "=" + value + '</div>');
});

答案 3 :(得分:3)

试试这个:

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

Example fiddle

答案 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>');
}
相关问题