对str[] 数组 排序,表头排序,重要性
把配置了 rank的字段取出来, 正数的一个数组,负数的一个数组
三个数组分别排序
rank给了数字的 给了正数的 就排在前面,越小的越是前面
给了负数的 就排在后面,绝对值越小的越是后面
没有rank的按照字典序
最后把三个数组拼起来, rank正数的在前面 rank没有的中间
文档:排序 rank 字段.note
链接:http://note.youdao.com/noteshare?id=37d1d92cf9e5276809daa680f3a6efc8&sub=649AB54BBDCA4CEB8678FB54A2EE3F89
// 示例用法
const inputArray: string[] = ["idstr", "name", "id", "address", "email"]
const sortConfig: SortConfig[] = [
{
key: "id",
rank: -1,
},
{
key: "idstr",
rank: -2,
},
{
key: "name",
rank: 1,
},
{
key: "phone",
rank: 2,
},
{
key: "address",
rank: 3,
},
];
const sortedArray = ListUtil. customSort(inputArray,ListUtil. sortConfig);
// const sortedArray = ListUtil. customSort(inputArray, sortConfig);
console.log("sortedArray");
console.log(sortedArray);
export interface SortConfig {
key: string;
rank?: number;
}
function customSort(arr: string[], config: SortConfig[]): string[] {
const positiveRankArr: string[] = [];
const negativeRankArr: string[] = [];
const noRankArr: string[] = [];
// 将字段根据 rank 的正负和有无分别放入不同的数组
for (const item of arr) {
const configItem = config.find((configItem) => configItem.key === item);
if (configItem) {
if (configItem.rank !== undefined) {
if (configItem.rank > 0) {
positiveRankArr.push(item);
} else if (configItem.rank < 0) {
negativeRankArr.push(item);
}
}
} else {
noRankArr.push(item);
}
}
// 分别对三个数组进行排序
const compareFn = (a: string, b: string) => a.localeCompare(b);
positiveRankArr.sort((a, b) => config.find((item) => item.key === a)!.rank! - config.find((item) => item.key === b)!.rank!);
negativeRankArr.sort((a, b) => Math.abs(config.find((item) => item.key === b)!.rank!) - Math.abs(config.find((item) => item.key === a)!.rank!));
noRankArr.sort(compareFn);
// 将三个数组拼接起来
return [...positiveRankArr, ...noRankArr, ...negativeRankArr];
}
const sortConfig: SortConfig[] = [
{
key: "id",
rank: 2,
},
{
key: "idstr",
rank: -1,
},
// {
// key: "name",
// rank: 1,
// },
{
key: "name",
rank: 3,
},
];
排序 rank 小的 在前面 正数 rank2 在rank3 的前面
[
"id",
"name",
"address",
"email",
"idstr"
]
文档:排序 rank 字段.note
链接:http://note.youdao.com/noteshare?id=37d1d92cf9e5276809daa680f3a6efc8&sub=649AB54BBDCA4CEB8678FB54A2EE3F89
const sortConfig: SortConfig[] = [
{
key: "id",
rank: 2,
},
{
key: "idstr",
rank: -2,
},
{
key: "address",
rank: -1,
},
// {
// key: "name",
// rank: 1,
// },
{
key: "name",
rank: 3,
},
];
[
"id",
"name",
"email",
"idstr",
"address"
]