如何在JavaScript中合并数字字符串键的JSON对象并按升序排列
合并两个数字字符串键的对象并按数字升序排列键
首先修正你示例代码里的语法错误:原始对象存在缺失逗号、字符串引号未闭合的问题,修正后才能正常运行。
完整解决方案代码
// 修正语法错误后的原始对象 let obj1 = { '10': "ten", '2': "two", "30": "thirty" }; let obj2 = { '4': "four", '5': "five", "1": "one" }; // 合并对象 + 按键数字升序排序构建结果 const merged = { ...obj1, ...obj2 }; const sortedKeys = Object.keys(merged).sort((a, b) => Number(a) - Number(b)); const res = Object.fromEntries(sortedKeys.map(key => [key, merged[key]])); console.log(res);
代码解释
- 合并对象:使用展开运算符
{...obj1, ...obj2}快速合并两个对象,如果存在重复键,obj2的键值会覆盖obj1的(若需要保留obj1的重复键,调换顺序为{...obj2, ...obj1}即可)。 - 排序键数组:通过
Object.keys(merged)获取所有键,再用sort方法排序。这里必须把键转换成数字(Number(a)、Number(b))后比较,否则字符串排序会出现'10'排在'2'前面的错误(字符串按字符编码顺序比较)。 - 构建有序对象:利用ES2019新增的
Object.fromEntries方法,将排序后的键值对数组直接转换为对象,语法简洁且可读性高。如果需要兼容更低版本环境,也可以用forEach遍历赋值:
const res = {}; sortedKeys.forEach(key => res[key] = merged[key]);
最终输出
{ "1": "one", "2": "two", "4": "four", "5": "five", "10": "ten", "30": "thirty" }
内容的提问来源于stack exchange,提问作者Aniket Raj
相关产品推荐
相关产品推荐

