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

JS对象使用invert方法键值反转后顺序不符合预期是什么原因?

JS对象反转后属性顺序不符合预期的原因

ES6 规范之后,普通对象({} 创建的)的属性枚举顺序是固定的,但不是完全按照属性插入的先后顺序排列,而是遵循以下优先级:

  • 首先是所有可以转换为非负整数的字符串类型键,按照数值从小到大排序
  • 其次是普通字符串类型键,按照属性被创建的先后顺序排序
  • 最后是 Symbol 类型键,按照创建的先后顺序排序

你反转后生成的对象有三个键:'Greg'、'40'、'cook',其中 '40' 属于可以转换为非负整数的字符串键,所以会被引擎自动优先排在所有普通字符串键的最前面,最终呈现你看到的输出顺序。这个表现是JS的标准行为,和你写的 invert 函数逻辑无关。

如果有严格保留属性插入顺序的需求,推荐使用ES6新增的Map结构,它的遍历顺序严格遵循属性插入的先后顺序,不会对键做自动排序调整,示例实现如下:

const obj = { keyname: 'Greg', keyage: 40, keyjob: 'cook'};
const invertedMap = new Map(Object.entries(obj).map(([key, value]) => [value, key]))

// 遍历Map会严格按照 Greg → 40 → cook 的插入顺序输出
for (const [k, v] of invertedMap) {
  console.log(k, v)
}

内容的提问来源于stack exchange,提问作者degsX2

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:15:05