gpt4 book ai didi

javascript - 在 Javascript 中按 2 个条件对数组进行排序不起作用

转载 作者:行者123 更新时间:2023-12-03 03:02:02 24 4
gpt4 key购买 nike

我想按 ID 和名称对对象数组进行排序。首先应该按 id 升序排序。然后应该按名称升序排序。

排序功能

<script>
$(document).ready(function() {
var list = [{
"id": "ts1",
"name": "TS1"
}, {
"id": "ts10",
"name": "TS10"
}, {
"id": "ts11",
"name": "TS11"
}, {
"id": "ts12",
"name": "TS12"
}, {
"id": "ts13",
"name": "TS2"
}, {
"id": "ts13",
"name": "TS1"
}, {
"id": "ts13",
"name": "TS3"
}, {
"id": "ts14",
"name": "TS14"
}, {
"id": "ts15",
"name": "TS15"
}, {
"id": "ts16",
"name": "TS16"
}, {
"id": "ts17",
"name": "TS17"
}, {
"id": "ts18",
"name": "TS18"
}, {
"id": "ts19",
"name": "TS19"
}, {
"id": "ts2",
"name": "TS2"
}, {
"id": "ts20",
"name": "TS20"
}, {
"id": "ts21",
"name": "TS21"
}, {
"id": "ts22",
"name": "TS22"
}, {
"id": "ts3",
"name": "TS3"
}, {
"id": "ts4",
"name": "TS4"
}, {
"id": "ts5",
"name": "TS5"
}, {
"id": "ts6",
"name": "TS6"
}, {
"id": "ts7",
"name": "TS7"
}]

list.sort(Sort_ID_Name);

console.log(list);
});

function Sort_ID_Name(a, b) {
try {
var aID = a.id.toLowerCase();
var bID = b.id.toLowerCase();
var aName = a.name.toLowerCase();
var bName = b.name.toLowerCase();
return ((aID < bID) ? -1 : ((aID > bID) ? 1 : ((aName < bName) ? -1 : ((aName > bName) ? 1 : 0))));
} catch (err) {}
}

</script>

当前排序列表显示如下:

{id: "ts1", name: "TS1"}
{id: "ts10", name: "TS10"}
{id: "ts11", name: "TS11"}
{id: "ts12", name: "TS12"}
{id: "ts13", name: "TS1"}
{id: "ts13", name: "TS2"}
{id: "ts13", name: "TS3"}
{id: "ts14", name: "TS14"}
{id: "ts15", name: "TS15"}
{id: "ts16", name: "TS16"}
....

理想的状态是这样的

{id: "ts1", name: "TS1"}
{id: "ts2", name: "TS2"}
...
{id: "ts10", name: "TS10"}
{id: "ts11", name: "TS11"}
{id: "ts12", name: "TS12"}
{id: "ts13", name: "TS1"}
{id: "ts13", name: "TS2"}
{id: "ts13", name: "TS3"}
{id: "ts14", name: "TS14"}
{id: "ts15", name: "TS15"}
{id: "ts16", name: "TS16"}
....

该函数仅在列表很短时有效,但当列表很长时则效果不佳。查看现场演示-https://jsfiddle.net/0xLd6sms/2/

最佳答案

您可以使用自定义排序方法 localeComapre()指定numeric: true选项,它将智能识别数字

var list = [{ "id": "ts1", "name": "TS1" }, { "id": "ts10", "name": "TS10" }, { "id": "ts11", "name": "TS11" }, { "id": "ts12", "name": "TS13" }, { "id": "ts13", "name": "TS2" }, { "id": "ts13", "name": "TS1" }, { "id": "ts13", "name": "TS3" }, { "id":"ts14", "name": "TS14" }, { "id": "ts15", "name": "TS15" }, { "id": "ts16", "name": "TS16" }, { "id": "ts17", "name": "TS17" }, { "id": "ts18", "name": "TS18" }, { "id": "ts19", "name": "TS19" }, { "id": "ts2", "name": "TS2" }, { "id": "ts20", "name":"TS20" }, { "id": "ts21", "name": "TS21" }, { "id": "ts22", "name": "TS22" }, { "id": "ts3", "name": "TS3" }, { "id": "ts4", "name": "TS4" }, { "id": "ts5", "name": "TS5" }, { "id": "ts6", "name": "TS6" }, { "id": "ts7", "name": "TS7" }];
list.sort((a,b) => a.id.localeCompare(b.id, undefined, {numeric: true}) || a.name.localeCompare(b.name, undefined, {numeric: true}));
console.log(list);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 在 Javascript 中按 2 个条件对数组进行排序不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47336838/

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