我有一个如下所示的对象数组,我想按每个对象的值对数组进行排序。
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
}
})
但我只得到颠倒的数组,未按我的意愿排序。
我发现了类似的问题,但当我尝试其他解决方案时,它对我不起作用,或者我做错了什么。
最佳答案
我认为您滥用了数据格式。对象不能替代数组,其中键必须索引 0
、1
...
无论如何:
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/