使用另一个数组以严格相同的顺序打字稿对数组进行排序
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)
我正在尝试对这个数组进行排序
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)