如何获取JavaScript对象中键名的长度而非键值长度?
获取JavaScript对象键名的长度及筛选方法
首先先把你的示例对象修正为标准的JavaScript对象格式,方便后续演示:
const userData = { Johnny: 7, William: 235, Betty: 16 };
一、获取单个键名的长度
如果你想直接获取某个特定键名(比如Betty)的长度,不需要绕弯子,直接用键名字符串的length属性就行:
// 直接指定键名 console.log('Betty'.length); // 输出 5 // 如果是动态获取键名,先拿到键名再取长度 const targetKey = 'Betty'; console.log(targetKey.length); // 同样输出 5
如果是不确定键名,需要从对象中匹配获取,也可以用Object.keys()先拿到所有键名数组再查找:
const targetKey = Object.keys(userData).find(key => key === 'Betty'); console.log(targetKey.length); // 输出 5
二、筛选键名长度为7的条目
你提到要遍历对象并筛选键名长度为7的条目,这里有两种常用方法,各有优势:
方法1:使用for...in循环
这是你计划用的方式,需要注意加上hasOwnProperty判断(避免遍历到原型链上的继承属性),然后在循环里判断键名长度:
for (const key in userData) { // 确保只处理对象自身的属性 if (userData.hasOwnProperty(key)) { if (key.length === 7) { console.log(`符合条件的条目:${key} -> ${userData[key]}`); // 这里会输出 "符合条件的条目:William -> 235" } } }
方法2:转换为数组后筛选(更简洁)
利用ES6的Object.entries()或Object.keys()方法,把对象转换成数组后,用数组的filter方法筛选,代码会更简洁易读:
// 方式A:获取符合条件的键值对数组 const filteredEntries = Object.entries(userData).filter(([key]) => key.length === 7); // 输出结果:[["William", 235]] // 遍历输出筛选后的内容 filteredEntries.forEach(([key, value]) => { console.log(`${key}: ${value}`); }); // 方式B:只获取符合条件的键名 const filteredKeys = Object.keys(userData).filter(key => key.length === 7); // 输出结果:["William"]
哪种方法更简便?
如果你的需求只是简单筛选并处理,转换为数组的方式更简便——数组的filter、forEach等方法让代码逻辑更清晰,不需要手动写循环里的条件判断,也不用担心原型链属性的问题(因为Object.keys/entries只会返回对象自身的可枚举属性)。
当然for...in也完全可行,适合习惯传统循环写法的场景,或者需要在循环里做更复杂逻辑的情况。
内容的提问来源于stack exchange,提问作者Ronk
相关产品推荐
相关产品推荐

