В ES6 вы можете циклически перемещаться по объекту следующим образом: (используя функцию стрелки )
Object.keys(myObj).forEach(key => {
console.log(key); // the name of the current key.
console.log(myObj[key]); // the value of the current key.
});
jsbin
В ES7 вы можете использовать Object.entries
вместо Object.keys
и проходить через такой объект:
Object.entries(myObj).forEach(([key, val]) => {
console.log(key); // the name of the current key.
console.log(val); // the value of the current key.
});
Вышеуказанное также будет работать как однострочный :
Object.keys(myObj).forEach(key => console.log(key, myObj[key]));
jsbin
Если вы хотите перебрать и вложенные объекты, вы можете использовать рекурсивную функцию (ES6):
const loopNestedObj = (obj) => {
Object.keys(obj).forEach(key => {
if (obj[key] && typeof obj[key] === 'object') loopNestedObj(obj[key]); // recurse.
else console.log(key, obj[key]); // or do something with key and val.
});
};
jsbin
То же, что и функция выше, но с ES7 Object.entries
вместо Object.keys
:
const loopNestedObj = (obj) => {
Object.entries(obj).forEach(([key, val]) => {
if (val && typeof val === 'object') loopNestedObj(val); // recurse.
else console.log(key, val); // or do something with key and val.
});
};
Если вы занимаетесь функциональным программированием , вы можете использовать Object.keys
/ Object.entries
для перечисления объекта, затем обработать значения и затем использовать reduce()
для преобразования обратно в новый объект.
const loopNestedObj = (obj) =>
Object.keys(obj)
// Use .filter(), .map(), etc. if you need.
.reduce((newObj, key) =>
(obj[key] && typeof obj[key] === 'object') ?
{...newObj, [key]: loopNestedObj(obj[key])} : // recurse.
{...newObj, [key]: obj[key]}, // Define value.
{});