我有 2 个对象列表。
一个是“所有”对象的列表,第二个是“特殊”对象的列表。
第一个列表包含所有对象,包括特殊对象。
如何对“所有”对象列表进行排序,以按以下方式对对象进行排序:首先是“特殊”对象,然后是所有其他对象?
每个对象都有一个id。
例如,
列表 1:
[
{Id: 1, Name: "a", Surname: "a"},
{Id: 2, Name:"b", Surname:"b"},
{Id: 3, Name: "c", Surname: "c"}
]
list 2:
[
{Id: 2, Name:"b", Surname:"b"}
]
如何排序,所以最后的列表是:
[
{Id: 2, Name:"b", Surname:"b"},
{Id: 1, Name: "a", Surname: "a"},
{Id: 3, Name: "c", Surname: "c"}
]
最佳答案
您可以使用 find
函数检查两个比较元素之一是否特殊,并在自定义 sort
函数中相应地返回结果:
let all = [{Id: 1, Name: "a", Surname: "a"}, {Id: 2, Name:"b", Surname:"b"}, {Id: 3, Name: "c", Surname: "c"}];
let special = [{Id: 2, Name:"b", Surname:"b"}];
function sortFunc(a, b) {
var s1 = special.find(s=>s.Id==a.Id);
var s2 = special.find(s=>s.Id==b.Id);
if(s1 && s2) return 0;
else if(s1) return -1;
else if(s2) return 1;
return 0;
}
let sorted = all.slice().sort(sortFunc);
console.log(sorted);
关于javascript - TS 2 数组,如果第一个数组中的项目存在于第二个数组中,则附加到第二个数组的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62765295/