对str[] 数组 排序,表头排序,重要性 ts

对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"
]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值