根据在另一个数组中定义的顺序对Javascript中的数组进行排序

根据在另一个数组中定义的顺序对Javascript中的数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有两个阵列: let x = ['a', 'b', 'c'] let y = ['z', 'c', 'a'] 我想根据x中定义的顺序对y进行排序。 我尝试过这种方法: y.sort((a,b) => { return x.indexOf(b) - x.indexOf(a) }) 问题是它没有保持x中定义的唯一顺序 设x=['a','b','c'] 设y=['z','c','a'] y、 排序((a,b)=>{返回x.indexOf(b)-x.indexOf(a)}) 控制台日志(y

我有两个阵列:

let x = ['a', 'b', 'c']
let y = ['z', 'c', 'a']
我想根据
x
中定义的顺序对
y
进行排序。 我尝试过这种方法:

y.sort((a,b) => { return x.indexOf(b) - x.indexOf(a) })
问题是它没有保持
x
中定义的唯一顺序

设x=['a','b','c']
设y=['z','c','a']
y、 排序((a,b)=>{返回x.indexOf(b)-x.indexOf(a)})

控制台日志(y)首先,您正在按降序排序,因为您首先获取第二个参数的索引,反之亦然

然后您会遇到未知项的问题,它们会得到
-1
,并在顶部排序,但您需要将这些项排序到底部


您可以使用默认值将未知项排序到底部

返回
-1
对于不在数组中的项目,
+1
给出一个可与一起使用的值,
无穷大
是一个值,大到足以将项目移动到底部

var x=['a','b','c'],
y=['z','c','a'];
y、 排序((a,b)=>(x.indexOf(a)+1 |无穷)-(x.indexOf(b)+1 |无穷));

控制台日志(y);//cz
您只需要使用Array.prototype.sort
并向其传递一个排序函数,该函数根据元素在另一个数组中的索引位置(如果存在)进行排序。有关详细信息,请参见排序功能中的注释:

设x=['a','b','c'];
设y=['z','c','a'];
常量排序=(位置,arr)=>{
常数分类器=(a,b)=>{
const idxA=位置。indexOf(a);
const idxB=位置。indexOf(b);
//如果a在位置上不存在,那么它应该在被比较的任何位置之后出现
如果(idxA==-1){
返回1;
}
//如果a确实存在于位置中,但b不存在,那么b应该在后面
if(idxB===-1){
返回-1
}
//比较索引,因为它们都存在
返回idxA-idxB;
}
返回arr.sort(分拣机);
}
日志(排序(x,y))