按嵌套对象值对数组进行排序
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);
我有一个结构类似于这样的数组:
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);