javascript - JS sort() 在嵌套对象上无法按预期工作

标签 javascript arrays sorting nested-object

我有一个如下所示的对象数组,我想按每个对象的值对数组进行排序。


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


//result - array I want to get as the final result of sort
sortedArr = [
        {
            0: "id3",
            1: {
                title: "object2",
                value: 100
            }
        },
        {
            0: "id2",
            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
        }             
    })

但我只得到颠倒的数组,未按我的意愿排序。

我发现了类似的问题,但当我尝试其他解决方案时,它对我不起作用,或者我做错了什么。

最佳答案

我认为您滥用了数据格式。对象不能替代数组,其中键必须索引 01...
无论如何:

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

const sortStrangeInputDataByValue = (a, b) => a["1"].value - b["1"].value;
const sorted = arr.sort(sortStrangeInputDataByValue);
console.log(sorted);

给定结构良好的项目对象数组,更好的数据输入将是:

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


const sortByValue = (a, b) => a.value - b.value;
const sorted = arr.sort(sortByValue);
console.log(sorted);

关于javascript - JS sort() 在嵌套对象上无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76596346/

相关文章:

javascript - 更快的循环 : foreach vs some (performance of jsperf is different than node or chrome)

C#:将数组分配给另一个数组:复制还是指针交换?

sql - 使用 GROUP BY 连接两个 SQL 表未达到预期结果

javascript - AngularJS 将 ng-bind-html 制作为动态构造的对象名称

javascript - 如何从 Nuxt 3 服务器访问 httpOnly cookie

javascript - 如何获取elasticsearch索引中的特定文档

c - 在数组名称中使用 int 计数器

php - 学说 2 : Dependency graph for a set of entities

sorting - 一个用于对通用集合进行排序的排序器函数

javascript - Three.js - 未捕获的类型错误 : Object function () { } has no method 'getTangentAt' TubeGeometry. js:175