Перебирая все свойства объекта в javascript, используя Prototype? - PullRequest
89 голосов
/ 26 февраля 2009

Есть ли способ перебирать каждое свойство объекта с помощью фреймворка Prototype JavaScript?

Вот ситуация: я получаю ответ AJAX в JSON, который выглядит примерно так:

{foo: 1, bar: 2, barobj: {75: true, 76: false, 85: true}}

Если я оцениваю этот ответ json для переменной response, я хочу иметь возможность перебирать каждое свойство в объекте response.barobj, чтобы увидеть, какие индексы являются истинными, а какие ложными.

Прототип имеет и Object.keys(), и Object.values(), но, как ни странно, не имеет простой функции Object.each()! Я мог бы взять результаты Object.keys () и Object.values ​​() и перекрестную ссылку на другую, когда я перебираю одну, но это такой взлом, что я уверен, что есть правильный способ сделать это!

Ответы [ 3 ]

550 голосов
/ 26 февраля 2009

Здесь нет необходимости в прототипе: в JavaScript есть for..in циклов. Если вы не уверены, что никто не запутался в Object.prototype, отметьте также hasOwnProperty(), то есть

for(var prop in obj) {
    if(obj.hasOwnProperty(prop))
        doSomethingWith(obj[prop]);
}
42 голосов
/ 26 февраля 2009

Вы должны сначала преобразовать ваш литерал объекта в хеш-код прототипа :

// Store your object literal
var obj = {foo: 1, bar: 2, barobj: {75: true, 76: false, 85: true}}

// Iterate like so.  The $H() construct creates a prototype-extended Hash.
$H(obj).each(function(pair){
  alert(pair.key);
  alert(pair.value);
});
0 голосов
/ 26 февраля 2009

Вы должны перебрать ключи и получить значения в квадратных скобках.

См .: Как перечислить свойства объекта javascript?

РЕДАКТИРОВАТЬ: Очевидно, что это делает вопрос дубликатом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...