Подтвердить что ты не робот

Итерация через хэш-таблицу объекта

Я пытаюсь использовать хеш-таблицу, поэтому я могу выбрать конкретный объект, хранящийся в массиве/объекте. Тем не менее, я столкнулся с проблемой, проходящей через объект.

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?

4b9b3361

Ответ 1

Не используйте цикл for(i=0; i<size; i++). Вместо этого используйте:

  • Object.keys(pins), чтобы получить список свойств и пропустить его или
  • Используйте for ( key_name in pins) совместно с Object.hasOwnProperty (чтобы исключить свойства наследования), чтобы прокручивать свойства.

Проблема вашего третьего тестового примера заключается в том, что он считывает значения ключей 0, 1 и 2 (вместо 6, 7, 8).

Ответ 2

var hash = {}
hash[key] = value

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

Ответ 3

Поскольку вы используете jQuery:

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

Ответ 4

Попробуйте следующее:

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

Пример скрипта

Ответ 5

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

Это итерация по id всех полей в любом объекте

Ответ 6

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