Итерации по каждому свойству объекта в javascript с использованием прототипа?

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

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

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

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

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

Ответов (3)

Решение

Сначала вам нужно преобразовать литерал вашего объекта в хеш прототипа :

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

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

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

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

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

for(var prop in obj) {
    if(obj.hasOwnProperty(prop))
        doSomethingWith(obj[prop]);
}