使用js排序

示例数据

data() {
    return {
      tableData: [
        {
          date: "2016-05-02",
          num: 99,
          address: "上海市",
        },
        {
          date: "2016-05-04",
          num: 88,
          address: "北京市",
        },
        {
          date: "2016-06-03",
          num: 8,
          address: "B市",
        },
        {
          date: "2016-08-06",
          num: "45",
          address: "6市",
        },
        {
          date: "2016-02-03",
          num: 58,
          address: "厦门市",
        },
        {
          date: "2016-01-03",
          num: "23",
          address: "A市",
        },
        {
          date: "2016-05-06",
          num: 45,
          address: "a市",
        },

        {
          date: "2016-07-06",
          num: 45,
          address: "8市",
        },
        {
          date: "2016-06-06",
          num: 45,
          address: "1市",
        },
        {
          date: "2016-05-01",
          num: 66,
          address: "深圳市",
        },
        {
          date: "2016-05-07",
          num: "55",
          address: "成都市",
        },
        {
          date: "2016-03-03",
          num: "12",
          address: "b市",
        },

        {
          date: "2016-08-09",
          num: 99,
          address: "F市",
        },
        {
          date: "2016-07-03",
          num: 55,
          address: "f市",
        },
      ],
    };
  },

1.按日期升序/按日期降序

 dateSort(sortType) {
      // 升序
    // a.date,b.date 日期
      if (sortType == "升序") {
        this.tableData.sort((a, b) => new Date(a.date) - new Date(b.date));
      }
      // 降序
      if (sortType == "降序") {
        this.tableData.sort((a, b) => new Date(b.date) - new Date(a.date));
      }
    },

2.数量升序和降序排序

numSort(sortType) {
      // 升序 a.num,b.num数量
      if (sortType == "升序") {
        this.tableData.sort((a, b) => {
          const numA = parseInt(a.num);
          const numB = parseInt(b.num);
          if (numA < numB) {
            return -1;
          }
          if (numA > numB) {
            return 1;
          }
          return 0;
        });
      }
      // 降序
      if (sortType == "降序") {
        this.tableData.sort((a, b) => {
          const numA = parseInt(a.num);
          const numB = parseInt(b.num);
          if (numA > numB) {
            return -1;
          }
          if (numA < numB) {
            return 1;
          }
          return 0;
        });
      }
    },

3.中文排序(按照数字、中文、英文的顺序进行排序)

stringSort() {
      // 按照数字、中文、英文的顺序进行排序
      this.tableData.sort((a, b) => {
        const regNum = /^[0-9]*$/;
        const regChinese = /^[\u4e00-\u9fa5]*$/;

        const partsA = a.address//地址
          .split(/(\d+)|([\u4e00-\u9fa5]+)|(\w+)/)
          .filter(Boolean);
        const partsB = b.address//地址
          .split(/(\d+)|([\u4e00-\u9fa5]+)|(\w+)/)
          .filter(Boolean);

        for (let i = 0; i < Math.min(partsA.length, partsB.length); i++) {
          let partA = partsA[i];
          let partB = partsB[i];

          if (partA !== partB) {
            if (regNum.test(partA) && regNum.test(partB)) {
              return parseInt(partA) - parseInt(partB);
            } else if (regChinese.test(partA) && regChinese.test(partB)) {
              return partA.localeCompare(partB, "zh-Hans-CN", {
                sensitivity: "accent",
              });
            } else {
              return partA.localeCompare(partB);
            }
          }
        }

        return partsA.length - partsB.length;
      });
    },

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值