我有一個結構與此類似的陣列:
links = [
{
orig:{ src:"A", target:"B"},
source:{},
target:{}
},
{
orig:{ src:"B", target:"C"},
source:{},
target:{}
},
{
orig:{ src:"C", target:"A"},
source:{},
target:{}
},
{
orig:{ src:"A", target:"C"},
source:{},
target:{}
},
{
orig:{ src:"C", target:"B"},
source:{},
target:{}
}
]
我需要根據“orig”物件中的嵌套值“src”和“target”對該陣列進行排序。它應該在“src”上按字母順序排序,如果多個“src”具有相同的值,則它使用“target”來查看將哪個放在另一個之前。
所需的排序結果應該是:
links = [
{
orig:{ src:"A", target:"B"},
source:{},
target:{}
},
{
orig:{ src:"A", target:"C"},
source:{},
target:{}
},
{
orig:{ src:"B", target:"C"},
source:{},
target:{}
},
{
orig:{ src:"C", target:"A"},
source:{},
target:{}
},
{
orig:{ src:"C", target:"B"},
source:{},
target:{}
}
]
我需要排序的陣列有超過 8000 行。什么是實作這一目標的有效方法?我已經找到了一種“骯臟”的方法來使用幾個嵌套回圈來完成它,但是陣列中有 8000 行,它需要很長時間才能處理。所以這不是一個可行的解決方案。
uj5u.com熱心網友回復:
這是對 orig.src 然后在 orig.target 上的簡單排序:
const links = [
{
orig: { src: "A", target: "B" },
source: {},
target: {},
},
{
orig: { src: "B", target: "C" },
source: {},
target: {},
},
{
orig: { src: "C", target: "A" },
source: {},
target: {},
},
{
orig: { src: "A", target: "C" },
source: {},
target: {},
},
{
orig: { src: "C", target: "B" },
source: {},
target: {},
},
];
links.sort(function (a, b) {
return (
a.orig.src.localeCompare(b.orig.src) ||
a.orig.target.localeCompare(b.orig.target)
);
});
console.log(links);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/476976.html
標籤:javascript 排序
