迭代对象哈希表

Nyx*_*nyx 44 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>');
}
Run Code Online (Sandbox Code Playgroud)

JSFiddle:http://jsfiddle.net/7TrSU/

正如您所看到的那样TEST 3,使用object 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);
}
Run Code Online (Sandbox Code Playgroud)

console.log上述收益不确定,如果我这样做console.log(marker),而不是,我得到的价值marker.listing_id.对不起,我很困惑!

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

Ray*_*nos 94

var hash = {}
hash[key] = value

Object.keys(hash).forEach(function (key) { 
    var value = hash[key]
    // iteration code
})
Run Code Online (Sandbox Code Playgroud)

  • value 变量在使用后创建。 (2认同)

Rob*_*b W 45

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

  1. Object.keys(pins) 获取属性列表,并循环遍历它,或者
  2. 使用for ( key_name in pins)与结合Object.hasOwnProperty通过属性(排除继承属性)来循环.

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


Que*_*tin 5

由于您使用的是jQuery:

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


Ror*_*san 5

尝试这个:

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

小提琴示例

  • @Raynos 不,他们不是。然而,缺少“hasOwnProperty”是。 (3认同)

pbf*_*fy0 5

function iterate(obj){
    var keys = Object.keys(obj);
    for(i in keys){
        doSomething(obj[keys[i]].id);
    }
}
Run Code Online (Sandbox Code Playgroud)

这会迭代id任何对象中的所有字段