web-dev-qa-db-ja.com

オブジェクトハッシュテーブルを反復処理する

配列/オブジェクトに保存されている特定のオブジェクトを選択できるように、ハッシュテーブルを使用しようとしています。しかし、オブジェクトをループする問題があります。

_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>');
}
_

JSFiddlehttp://jsfiddle.net/7TrSU/

オブジェクトpinを使用してデータを格納する_TEST 3_でわかるように、オブジェクトundefinedをループするとpinが取得されます。

pinをループする正しい方法は何ですか?

[〜#〜] edit [〜#〜]

_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_は未定義を返し、代わりにconsole.log(marker)を実行すると、_marker.listing_id_の値を取得します。ごめんなさい、混乱しています!

$.each(markers, function(i, marker){});で動作するように管理しましたが、なぜ上記の_for..in_が動作しないのですか?

42
Nyxynyx

for(i=0; i<size; i++)ループを使用しないでください。代わりに、次を使用します。

  1. Object.keys(pins) プロパティのリストを取得してループする、または
  2. for ( key_name in pins)Object.hasOwnProperty と組み合わせて使用​​して(プロパティを継承しないように)、プロパティをループします。

3番目のテストケースの問題は、キー6、7、8の代わりにキー0、1、2の値を読み取ることです。

42
Rob W
var hash = {}
hash[key] = value

Object.keys(hash).forEach(function (key) { 
    var value = hash[key]
    // iteration code
})
93
Raynos

JQueryを使用しているため:

jQuery.each(pins, function (name, value) {
    $('#result3').append('<div>' + name + "=" + value + '</div>');
});
5
Quentin
function iterate(obj){
    var keys = Object.keys(obj);
    for(i in keys){
        doSomething(obj[keys[i]].id);
    }
}

これは、任意のオブジェクトのすべてのフィールドのidを反復処理します

3
pbfy0

これを試して:

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

fiddle の例

3
Rory McCrossan