JavaScript中的相对排序

假设我们有两个数组,比如说arr1和arr2。arr2的元素是不同的,并且arr2中的所有元素也都在arr1中。

我们需要编写一个JavaScript函数,该函数接受两个这样的数组并对arr1的元素进行排序,以使arr1中项目的相对顺序与arr2中相同。不在arr2中出现的元素应按升序放置在arr1的末尾。

例如-如果两个输入数组是-

const arr1 = [2,3,1,3,2,4,6,7,9,2,19];
const arr2 = [2,1,4,3,9,6];

那么输出应该是-

const output = [2,2,2,1,4,3,3,9,6,7,19];

示例

const arr1 = [2,3,1,3,2,4,6,7,9,2,19];
const arr2 = [2,1,4,3,9,6];
const relativeSortArray = (arr1, arr2) => {
   const map = new Map();
   const len = arr2.length;
   arr2.forEach((a, i) => {
      map.set(a, i); });
      return arr1.sort((a, b) => {
         a = map.has(a) ? map.get(a) : len + a;
         b = map.has(b) ? map.get(b) : len + b; return a - b;
   });
};
console.log(relativeSortArray(arr1, arr2));

输出结果

控制台中的输出将是-

[
   2, 2, 2, 1, 4,
   3, 3, 9, 6, 7,
   19
]