如何编写动态for循环兼容遍历含1个或多个键的JS对象
解决方案
原生for...in循环默认会遍历对象自身+原型链继承的可枚举属性,如果运行环境给Object原型挂载了额外的可枚举属性,就会遍历到不存在于你自定义对象上的键,读取值自然返回undefined。调整为仅读取对象自身属性的逻辑,即可适配任意键数量的对象,写法如下:
1. 兼容旧环境的优化for...in写法
// 通用遍历函数,传入任意对象都可输出所有自身键对应的值 function traverseObject(obj) { for (var key in obj) { // 仅处理对象自身属性,排除原型链继承的属性 if (obj.hasOwnProperty(key)) { print(obj[key]); } } } // 调用测试 traverseObject(myObjectA); traverseObject(myObjectB);
2. 现代JS更简洁的写法(无需手动判断原型属性)
如果运行环境支持ES6+,直接用Object.values获取所有自身属性值即可:
function traverseObject(obj) { Object.values(obj).forEach(value => print(value)) } // 调用测试 traverseObject(myObjectA); traverseObject(myObjectB);
仅需要获取指定目标键(如fruits)的值的写法
如果不需要遍历所有键,仅要读取固定目标键的值,无需循环:
// targetKey为你要获取的键名,不存在时会返回undefined,可按需加默认值 function getTargetValue(obj, targetKey) { return obj[targetKey] } // 示例:获取两个对象的fruits属性值 print(getTargetValue(myObjectA, 'fruits')) print(getTargetValue(myObjectB, 'fruits'))
内容的提问来源于stack exchange,提问作者Patricio F. Calatayud
相关产品推荐
相关产品推荐

