Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TS 2数组,若第一个数组中的项存在于第二个数组中,则追加到第二个数组的开头_Javascript_Arrays_Typescript - Fatal编程技术网

Javascript TS 2数组,若第一个数组中的项存在于第二个数组中,则追加到第二个数组的开头

Javascript TS 2数组,若第一个数组中的项存在于第二个数组中,则追加到第二个数组的开头,javascript,arrays,typescript,Javascript,Arrays,Typescript,我有两个对象列表 一个是“所有”对象的列表,第二个是“特殊”对象的列表 第一个列表包含所有对象,包括特殊对象 如何对“所有”对象列表进行排序,以便按照以下方式对对象进行排序:首先是“特殊”对象,然后是所有其他对象 每个对象都有一个id 比如说, 清单1: [ {Id: 1, Name: "a", Surname: "a"}, {Id: 2, Name:"b", Surname:"b"}, {Id: 3,

我有两个对象列表

一个是“所有”对象的列表,第二个是“特殊”对象的列表

第一个列表包含所有对象,包括特殊对象

如何对“所有”对象列表进行排序,以便按照以下方式对对象进行排序:首先是“特殊”对象,然后是所有其他对象

每个对象都有一个id

比如说,

清单1:

[
  {Id: 1, Name: "a", Surname: "a"},
  {Id: 2, Name:"b", Surname:"b"},
  {Id: 3, Name: "c", Surname: "c"}
]
清单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,姓名:“a”,姓氏:“a”},{Id:2,姓名:“b”,姓氏:“b”},{Id:3,姓名:“c”,姓氏:“c”}];
let special=[{Id:2,名称:“b”,姓氏:“b”}];
函数sortFunc(a,b){
var s1=special.find(s=>s.Id==a.Id);
var s2=special.find(s=>s.Id==b.Id);
if(s1&s2)返回0;
否则,如果(s1)返回-1;
否则,如果(s2)返回1;
返回0;
}
让sorted=all.slice().sort(sortFunc);

控制台日志(已排序)如果您愿意包含lodash,您可以使用此代码获得结果

const List1=[
{Id:1,姓名:“a”,姓氏:“a”},
{Id:2,姓名:“b”,姓氏:“b”},
{Id:3,姓名:“c”,姓氏:“c”}
]
常数列表2=[
{Id:2,姓名:“b”,姓氏:“b”}
]
const SpecialIds=u.map(列表2,(v)=>{return v.Id})
常量List3=u.sortBy(u.map(List1,(v)=>{
返回{.merge({},v,{
v
类型:u.indexOf(specialID,v.Id)==-1?'1_Normal':'0_Special'
})
}),['Type','Id'])
console.log(列表3)

我还要补充一点,
.sort()
方法是以可变的方式实现的,它将更改原始数组。因此,您可能希望在开始之前使用
.slice()
,就像这样
让sorted=all.slice().sort(sortFunc)