按嵌套对象值对数组进行排序

Sorting an array by nested object 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”对象中的嵌套值“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 行需要很长时间才能处理。所以这不是一个可行的解决方案。

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