javascript - TS 2 数组,如果第一个数组中的项目存在于第二个数组中,则附加到第二个数组的开头

标签 javascript arrays typescript

我有 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/

相关文章:

javascript - 未找到此依赖项 : *swiper/vue how to fix?

javascript - jQuery 追加 html 元素

c - 使用 malloc 的指针时出现奇怪的内存分配

typescript - 类型声明在不丢失名称的情况下删除类型周围的 "Array"

android - 将 TypeScript 与 HTML5 iOS 应用程序的专有属性结合使用

javascript - 带有 Redis 的 Laravel 广播无法工作/连接?

javascript - ThreeJS 中的弯曲文本对象

java - 通过创建对象为其他类的数组赋值

php - 如何处理 MySQLi fetch_all 结果?

typescript - typescript 中的顺序 promise