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

为何先推入Object.keys至数组再排序无效?求解析原因

问题解析:对象键排序的两种写法差异原因

先把两种写法的代码逻辑还原,就能直观看到问题核心:

第一种无效写法的代码逻辑

const obj = { b: 1, a: 2 };
const keysArr = [];
// 将Object.keys返回的键数组,作为单个元素推进keysArr
keysArr.push(Object.keys(obj));
// 对外层的keysArr执行排序,但此时keysArr是 [ ['b', 'a'] ]
keysArr.sort();

第二种有效写法的代码逻辑

const obj = { b: 1, a: 2 };
const keysArr = [];
// 先对Object.keys返回的键数组原地排序,得到['a', 'b']
const sortedObjKeys = Object.keys(obj).sort();
// 把排好序的数组推进keysArr
keysArr.push(sortedObjKeys);

核心差异点

  1. 数组嵌套的问题:第一种写法里,push(Object.keys(obj))是把键数组当成keysArr的一个元素,最终keysArr是包含子数组的二维数组[ ['b', 'a'] ]。此时调用keysArr.sort()是对外层数组排序,但外层只有一个元素,排序等于没执行。
  2. 排序目标错误:你真正需要排序的是Object.keys(obj)返回的键数组,而非外层的keysArr。如果想让第一种写法生效,应该改成对推进去的子数组排序:
keysArr.push(Object.keys(obj));
keysArr[0].sort(); // 此时keysArr[0]会变成['a', 'b']
  1. sort方法的特性:sort()是原地修改数组的方法,第一种写法里你调用的是外层数组的sort,而非目标键数组的sort;第二种写法先对键数组执行sort,再把排好序的结果推进外层数组,自然得到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:26:02