在ES6/2015 中,您可以像这样循环遍历对象(使用箭头函数):
Object.keys(myObj).forEach(key => {
console.log(key); // the name of the current key.
console.log(myObj[key]); // the value of the current key.
});
JS斌
在ES7/2016 中,您可以使用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.entries(myObj).forEach(([key, val]) => console.log(key, val));
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.
});
};
JS斌
与上面的函数相同,但使用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.entries()
结合使用Object.fromEntries()
( ES10/2019 )一次性返回一个新对象:
const loopNestedObj = obj =>
Object.fromEntries(
Object.entries(obj).map(([key, val]) => {
if (val && typeof val === "object") [key, loopNestedObj(val)]; // recurse
else [key, updateMyVal(val)]; // or do something with key and val.
})
);
另一种循环对象的方法是使用 for ... in和for ... of。请参阅vdegenne 写得很好的答案。