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どちらがオブジェクトを使用pinしてデータを格納しているかがわかるようにundefined、オブジェクトをループするときに取得しますpin

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

編集

だけでなく、 pin [6] =オブジェクトにし、それらのすべてのプロパティpin[6] = '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上記がうまくいかないのですか?

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. (継承プロパティを除外するために)for ( key_name in pins)と組み合わせて使用​​して、プロパティをループします。Object.hasOwnProperty

3番目のテストケースの問題は、キー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

これを試して:

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

フィドルの例

于 2012-04-08T11:11:12.800 に答える
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 に答える
-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 に答える