Вопрос: Итерация через свойства объекта


var obj = {
    name: "Simon",
    age: "20",
    clothing: {
        style: "simple",
        hipster: false
    }
}

for(var propt in obj){
    alert(propt + ': ' + obj[propt]);
}

Как переменная proptпредставляют свойства объекта? Это не встроенный метод или свойство. Тогда почему оно возникает с каждым свойством в объекте?


1480


источник


Ответы:


Итерирование свойств требует дополнительного hasOwnPropertyпроверить:

for (var property in object) {
    if (object.hasOwnProperty(property)) {
        // do stuff
    }
}

Это необходимо, потому что прототип объекта содержит дополнительные свойства для объекта, которые являются технически частью объекта. Эти дополнительные свойства наследуются от класса базового объекта, но все еще являются свойствами object,

hasOwnPropertyпросто проверяет, является ли это свойством, специфичным для этого класса, а не унаследованным от базового класса.


2021



Начиная с JavaScript 1.8.5 вы можете использовать Object.keys(obj)для получения массива свойств, определенных на самом объекте (те, которые возвращают true для obj.hasOwnProperty(key)).

Object.keys(obj).forEach(function(key,index) {
    // key: the name of the object key
    // index: the ordinal position of the key within the object 
});

Это лучше (и более читаемо), чем использование цикла for-in.

Поддерживается в этих браузерах:

  • Firefox (Gecko): 4 (2.0)
  • Chrome: 5
  • Internet Explorer: 9

Видеть Сеть разработчиков Mozilla Object.keys () ссылка для дополнительной информации.


750



Это for...in statement( MDN , Спецификация ECMAScript ).

Вы можете прочитать это как " ДЛЯ любое имущество В objобъекта, назначить каждое свойство PROPT переменная по очереди ».


188



Девочки и ребята, мы в 2017 году, и у нас нет такого количества времени для набора текста ... Итак, давайте сделаем этот классный новый дизайн ECMAScript 2016:

Object.keys(obj).map(e => console.log(`key=${e}  value=${obj[e]}`));

137



В будущих версиях ES вы можете использовать Object.entries:

for (const [key, value] of Object.entries(obj)) { }

или

Object.entries(obj).forEach(([key, value]) => ...)

Если вы просто хотите перебрать значения, используйте Object.values:

for (const value of Object.values(obj)) { }

или

Object.values(obj).forEach(value => ...)

55



Это просто for...inпетля. Проверять, выписываться документация в Mozilla ,


37



jquery allows you to do this now:

$.each( obj, function( key, value ) {
  alert( key + ": " + value );
});

20



You can use Lodash. The documentation

var obj = {a: 1, b: 2, c: 3};
_.keys(obj).forEach(function (key) {
    ...
});

11



let obj = {"a": 3, "b": 2, "6": "a"}

Object.keys(obj).map((item) => {console.log("item", obj[item])})

// a
// 3
// 2

10