使用另一个数组以严格相同的顺序打字稿对数组进行排序

Sort an array using another array in strictly same order typescript

我正在尝试对这个数组进行排序

const originalArray = ['Apple', 'Cat', 'Fan', 'Zebra', 'Goat', 'Van'];

使用这个数组

const sortOrder = ['Zebra', 'Van', "Cat"];

我试过用这个方法;

const sortedArray = originalArray.sort((a, b) => {
  return sortOrder.indexOf(b) - sortOrder.indexOf(a);
});

console.log(sortedArray) // Output:["Cat","Van","Zebra","Apple","Fan","Goat"]

虽然这不是预期的结果

预期的输出应该是这样的

["Zebra","Van","Cat","Apple","Fan","Goat"]

对使用任何库以及 lodash 的任何解决方案开放。 提前致谢

你可以用顺序取一个对象,对于未知的项目取一个大的值将它们排序到数组的末尾

const
    array = ['Apple', 'Cat', 'Fan', 'Zebra', 'Goat', 'Van'],
    sortOrder = ['Zebra', 'Van', "Cat"],
    order = Object.fromEntries(sortOrder.map((k, i) => [k, i + 1]));

array.sort((a, b) =>
    (order[a] || Number.MAX_VALUE) - (order[b] || Number.MAX_VALUE)
);

console.log(array);

尝试用 sortOrder

的反向排序

const originalArray = ['Apple', 'Cat', 'Fan', 'Zebra', 'Goat', 'Van'];
const sortOrder = ['Zebra', 'Van', "Cat"];

// reverse the `sortOrder`
let reverseOrder = sortOrder.reverse();

// if you want to keep `sortOrder` as it is
// then do slice() and then reverse()
// let reverseOrder = sortOrder.slice().reverse();

// The key point here is to sort by reverse of `sortOrder`
let sortedArray = originalArray.sort((a, b) => {
  return reverseOrder.indexOf(b) - reverseOrder.indexOf(a);
})

console.log(sortedArray)