gpt4 book ai didi

Javascript数组按给定顺序排序

转载 作者:行者123 更新时间:2023-11-30 08:28:29 24 4
gpt4 key购买 nike

我正在尝试通过一个属性对一组对象进行排序。当我使用比较函数对数组进行排序时,该数组已正确排序。但是排序后数组的顺序正在改变。我能做些什么来防止它?

我已经想到了一个解决方案,我可以将 data:0 元素分离到一个数组中,并对剩余元素进行排序并将两者连接起来。只是想知道是否有一种简单的方法可以做到这一点?

注意:hex 属性是一个我不能在比较函数中使用的对象。十六进制可以是任何值或字符串。

var arr = [
{hex: "100x213123", data: 0},
{hex: "20x213223", data: 0},
{hex: "30x313123", data: 200},
{hex: "40x413123", data: 0},
{hex: "50x213123", data: 0},
{hex: "60x213123", data: 0},
{hex: "70x213123", data: 100},
{hex: "80x213123", data: 0},
{hex: "90x213123", data: 100},
{hex: "100x213123",data: 100},
{hex: "110x213123", data: 0},
{hex: "120x213123", data: 0}
].sort(function (item1,item2){
return item1.data - item2.data;
});
console.log(JSON.stringify(arr));

结果

[{"hex":"100x213123","data":0},
{"hex":"120x213123","data":0},
{"hex":"110x213123","data":0},
{"hex":"40x413123","data":0},
{"hex":"50x213123","data":0},
{"hex":"60x213123","data":0},
{"hex":"20x213223","data":0},
{"hex":"80x213123","data":0},
{"hex":"90x213123","data":100},
{"hex":"100x213123","data":100},
{"hex":"70x213123","data":100},
{"hex":"30x313123","data":200}]

预期

  [{hex: "100x213123", data: 0},
{hex: "20x213223", data: 0},
{hex: "40x413123", data: 0},
{hex: "50x213123", data: 0},
{hex: "60x213123", data: 0},
{hex: "80x213123", data: 0},
{hex: "110x213123", data: 0},
{hex: "120x213123", data: 0},
{hex: "70x213123", data: 100},
{hex: "90x213123", data: 100},
{hex: "100x213123",data: 100},
{hex: "30x313123", data: 200}]

有什么想法吗?

最佳答案

如果 data 相同并按 hex 值排序,则需要进行二次排序:

var arr = [
{hex: "10x213123", data: 0},
{hex: "20x213223", data: 0},
{hex: "30x313123", data: 200},
{hex: "40x413123", data: 0},
{hex: "50x213123", data: 0},
{hex: "60x213123", data: 0},
{hex: "70x213123", data: 100},
{hex: "80x213123", data: 0},
{hex: "90x213123", data: 100},
{hex: "100x213123",data: 100},
{hex: "110x213123", data: 0},
{hex: "120x213123", data: 0}
].sort(function(item1, item2) {
if (item1.data !== item2.data)
return item1.data - item2.data;
else
return item1.hex.split("x")[0] - item2.hex.split("x")[0]
});
console.log(JSON.stringify(arr));

所以最好的办法就是加一个索引,然后把它作为第二个key进行排序。

var arr = [
{hex: "10x213123", data: 0},
{hex: "20x213223", data: 0},
{hex: "30x313123", data: 200},
{hex: "40x413123", data: 0},
{hex: "50x213123", data: 0},
{hex: "60x213123", data: 0},
{hex: "70x213123", data: 100},
{hex: "80x213123", data: 0},
{hex: "90x213123", data: 100},
{hex: "100x213123",data: 100},
{hex: "110x213123", data: 0},
{hex: "120x213123", data: 0}
].map(function (v, i) {
v.index = i;
return v;
}).sort(function(item1, item2) {
if (item1.data !== item2.data)
return item1.data - item2.data;
else
return item1.index - item2.index
}).map(function (v) {
delete v.index;
return v;
});
console.log(JSON.stringify(arr));

并删除索引

关于Javascript数组按给定顺序排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41454819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com