JS中未知对象键名提取嵌套属性及Object.values拆串疑问
结果产生的原因
1. 代码存在语法错误,调用逻辑不符合预期
你写的两段代码都缺少闭合括号,实际执行逻辑和你预想的完全不同:
- 第一段代码实际执行的是
Object.values(Object.values(currencies)[0]):先通过Object.values(currencies)[0]拿到第一层未知键对应的货币对象{name: "Swiss franc", symbol: "Fr."},再对这个对象调用Object.values(),自然返回属性值组成的数组["Swiss franc", "Fr."],输出时转成字符串就是你看到的Swiss franc,Fr.。 - 第二段代码实际执行的是
Object.values(Object.values(currencies)[0].name):你先取到了name属性对应的字符串"Swiss franc",反而把这个字符串传入了Object.values()进行处理。
2. Object.values()对字符串的处理特性
JavaScript中字符串属于类数组对象,每个字符对应一个数字索引,内置length属性。当Object.values()接收字符串作为入参时,会按索引提取每个字符,返回单个字符组成的数组,就是你看到的拆分结果。
正确的实现方式
直接提取
补全括号即可直接拿到目标值:
const targetName = Object.values(currencies)[0].name; // 取值为 "Swiss franc"
解构实现(符合题目要求)
如果你需要用解构语法实现,不知道第一层键名的情况下可以这么写:
// 从Object.values返回的数组第一个元素中解构出name属性 const [ { name } ] = Object.values(currencies); // name 取值为 "Swiss franc"
如果第一层包含多个货币对象,也可以批量提取所有货币名称:
const allCurrencyNames = Object.values(currencies).map(item => item.name);
内容的提问来源于stack exchange,提问作者somniumm
相关产品推荐
相关产品推荐

