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

JS sort()对嵌套对象排序未达预期,求正确实现方法

按嵌套对象的value属性排序数组

原数组:

const arr = [
        {
            0: "id1",
            1: {
                title: "object1",
                value: 200
            }
        },
        {
            0: "id2",
            1: {
                title: "object2",
                value: 100
            }
        },
        {
            0: "id3",
            1: {
                title: "object3",
                value: 300
            }
        },
    ]

期望的升序排序结果:

const sortedArr = [
        {
            0: "id2",
            1: {
                title: "object2",
                value: 100
            }
        },
        {
            0: "id1",
            1: {
                title: "object1",
                value: 200
            }
        },
        {
            0: "id3",
            1: {
                title: "object3",
                value: 300
            }
        },
    ]

你尝试的错误代码:

const sortedArr = arr.sort((a, b) => {
        if (a[1].value - b[1].value) {
            return -1
        } else {
            return 1
        }             
    })

问题原因

你写的排序回调逻辑错误:只要a[1].value - b[1].value的结果不为0(不管是正数还是负数),就返回-1,这会完全打乱排序的比较逻辑。Array.sort()的回调函数需要根据元素大小返回对应数值:

  • 返回负数:a排在b前面
  • 返回正数:a排在b后面
  • 返回0:a和b位置不变

正确解法

要实现升序排序,直接返回两个value的差值即可:

// 升序排序(从小到大)
const sortedArr = [...arr].sort((a, b) => a[1].value - b[1].value);

如果需要降序排序,反转差值顺序:

// 降序排序(从大到小)
const sortedArr = [...arr].sort((a, b) => b[1].value - a[1].value);

注意:Array.sort()会原地修改原数组,若不想改变原数组,建议先用扩展运算符[...arr]或arr.slice()复制新数组再排序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:12:17