javascript - Sorting 嵌套对象的数组 value

我有一个结构与此类似的数组:

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);