You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 01:18:01