Javascript JS按特定排序顺序排序

Javascript JS按特定排序顺序排序,javascript,arrays,sorting,ecmascript-6,Javascript,Arrays,Sorting,Ecmascript 6,我需要按如下所示的特定顺序对数据进行排序 const sortBy = ['b','a','c','e','d'] const data = ['a','d','e'] 我知道如何按升序/降序排序 console.log(data.sort((a, b) => a > b)) //["a", "d", "e"] console.log(data.sort((a, b) => a < b)) //["e", "d", "a"] 这似乎工作正常,但我想知道是否有一种方法可

我需要按如下所示的特定顺序对数据进行排序

const sortBy = ['b','a','c','e','d']
const data = ['a','d','e']
我知道如何按升序/降序排序

console.log(data.sort((a, b) => a > b)) //["a", "d", "e"]
console.log(data.sort((a, b) => a < b)) //["e", "d", "a"]
这似乎工作正常,但我想知道是否有一种方法可以通过
sort

您的
。sort()
回调可以执行任何需要执行的操作,以确定任何给定项是否应位于任何其他给定项之前或之后。因此,它可以通过数组在
排序中查找当前项的索引,并相应地进行操作:

const sortBy=['b','a','c','e','d']
常量数据=['a','d','e']
console.log(data.sort((a,b)=>sortBy.indexOf(a)-sortBy.indexOf(b))
您的
.sort()
回调可以执行任何需要执行的操作,以确定任何给定项是否应位于任何其他给定项之前或之后。因此,它可以通过
数组在
排序中查找当前项的索引,并相应地进行操作:

const sortBy=['b','a','c','e','d']
常量数据=['a','d','e']

console.log(data.sort((a,b)=>sortBy.indexOf(a)-sortBy.indexOf(b))
“我知道如何通过关联/降序进行排序”-你确定吗?排序回调不应返回布尔值。。。无论如何,
数据
项是否保证按
数组排序?“我知道如何按关联/降序排序”-您确定吗?排序回调不应返回布尔值。。。不管怎样,
数据
项是否保证在
数组中。你的解决方案是可行的:你传入了一个不在列表中的值,比如['t','a','d','p','e']。您的代码返回时带有[“t”、“a”、“e”、“d”]。如果你输入[“t”、“a”、“d”、“p”、“e”],你会得到同样的结果!不,排序顺序是a、e、d,因此初始测试是可以的,@RobertMoskal-如果正在排序的数组包含不在
sortBy
数组中的值,那么根据定义,我认为排序的结果是未定义的,但结果在数组中仍然具有相同数量的项。但正如我在第一句话中所说,您需要编写排序回调代码,以执行排序规则所需的任何操作。OP没有说明如何处理
中未排序的值,但您可以添加if/else或任何内容,以默认返回到未知值的字母排序。我没有大的批评。这是一种奇怪的情况,我认为这是一个相当做作的例子。你的解决方案是可行的:你传入了一个不在列表中的值,比如['t','a','d','p','e']。您的代码返回时带有[“t”、“a”、“e”、“d”]。如果你输入[“t”、“a”、“d”、“p”、“e”],你会得到同样的结果!不,排序顺序是a、e、d,因此初始测试是可以的,@RobertMoskal-如果正在排序的数组包含不在
sortBy
数组中的值,那么根据定义,我认为排序的结果是未定义的,但结果在数组中仍然具有相同数量的项。但正如我在第一句话中所说,您需要编写排序回调代码,以执行排序规则所需的任何操作。OP没有说明如何处理
中未排序的值,但您可以添加if/else或任何内容,以默认返回到未知值的字母排序。我没有大的批评。这有点奇怪,
const commonItems = getCommonItemsInArrays(sortBy,data)
console.log(commonItems.map(item => item)) //["a", "e", "d"]

function getCommonItemsInArrays(array1,array2){
  return array1.filter(n => array2.indexOf(n) >= 0)
}