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

向函数传入JSON对象后console.log输出顺序不符预期的问题

如何保持JavaScript对象键的原始插入顺序输出

你遇到的这个问题是JavaScript对象的键排序规则导致的:在JS中,对象的数字类型键(或者可以被转换为数字的字符串键,比如"1")会被优先提取出来按升序排列,剩下的字符串键才会按照插入顺序排列——这就是为什么你的"1"键跑到最前面去了。

要严格保持传入时的原始顺序,有几个实用的解决方案:

方案1:使用Map(推荐)

Map是ES6引入的数据结构,它会严格保持键的插入顺序,无论键的类型是什么(数字、字符串甚至对象)。而且现代浏览器的控制台也能正确展示Map的顺序:

function logJson(data) {
  console.log(data);
  // 可选:转换为普通对象格式(注意:转换后数字键仍会排序,所以直接看Map更准确)
  const plainObj = Object.fromEntries(data);
  console.log("转换为普通对象(数字键会排序):", plainObj);
}

// 用Map存储,键值对按原始顺序排列
const userData = new Map([
  ["first_name", "First Name"],
  ["last_name", "Last Name"],
  ["phone", "Phone"],
  ["orgname", "Organisation Name"],
  ["email", "Email"],
  ["1", "Sign-up Date"] // 这里用字符串"1"或者数字1都可以,Map都会保留顺序
]);

logJson(userData);

方案2:用数组存储键值对数组

如果需要兼容更旧的JS环境(不支持ES6 Map),可以用二维数组来存储键值对,顺序完全由你手动控制:

function json(data) {
  console.log("原始键值对数组:", data);
  // 可选:转换为普通对象(同样,数字键会被排序)
  const formattedObj = data.reduce((acc, [key, value]) => {
    acc[key] = value;
    return acc;
  }, {});
  console.log("转换为普通对象:", formattedObj);
}

// 按原始顺序传入键值对数组
json([
  ["first_name", "First Name"],
  ["last_name", "Last Name"],
  ["phone", "Phone"],
  ["orgname", "Organisation Name"],
  ["email", "Email"],
  ["1", "Sign-up Date"]
]);

不推荐的方案:修改键名

如果一定要用普通对象,你可以把数字键改成非数字开头的字符串(比如把"1"改成"sign_up_date"或"_1"),这样JS就会把它当成普通字符串键,按插入顺序排列。但这会改变键的名称,可能不符合你的需求,所以一般不推荐这种方法。

总的来说,Map是最优雅的解决方案,既能保持顺序,又能保留键的原始类型;而数组键值对的方案兼容性最好,适合所有场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:20:47