我有一个结构与此类似的数组:
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”对象中的嵌套 values“src”和“target”上对该数组进行排序。它应该在“src”上按字母顺序排序,如果有多个具有相同 value 的“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 行需要很长时间才能处理。所以这不是一个可行的解决方案。
回答1
这是对 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);