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

JavaScript中如何将含非连续数字键的对象转换为数组?

带不连续数字键的对象转稀疏数组的简便实现

最省事的写法

直接用Object.assign()就能搞定,它会把对象里的数字键对应的值直接放到数组的对应索引位置,缺的索引自动留空:

const toArray = (obj) => Object.assign([], obj);

// 测试示例
const raggedArrayObj = {"0": 10, "1": 3, "3": 5};
const raggedArray = toArray(raggedArrayObj); // [10, 3, , 5]

为啥这方法能行?

数组本身就是特殊的对象,索引其实就是它的数字属性名。Object.assign()会遍历源对象的所有可枚举属性,把它们赋值给目标数组的对应索引。要是中间某个数字键没在对象里,数组的那个索引就会是空元素(注意这和undefined不一样,遍历数组的时候会跳过这种空元素)。

另一种写法(适合键不从0开始的情况)

如果你的对象键不是从0开始,比如{"2":4,"5":9},想确保数组长度刚好覆盖到最大的键,可以先找最大键值,再初始化数组赋值:

function toArray(obj) {
  const numKeys = Object.keys(obj).map(Number);
  if (numKeys.length === 0) return [];
  const maxIndex = Math.max(...numKeys);
  const arr = new Array(maxIndex + 1);
  numKeys.forEach(key => arr[key] = obj[key]);
  return arr;
}

用这个方法处理{"2":4,"5":9},会得到[ , , 4, , , 9],长度刚好对应最大索引+1。


内容的提问来源于stack exchange,提问作者Adam B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:45:35