JS自定义排序

开门见山,直接上函数

const customSort = ({ data, sortBy, sortField }) => {
  const sortByObject = sortBy.reduce(
    (obj, item, index) => ({
      ...obj,
      [item]: index
    }),
    {}
  );
  return data.sort(
    (a, b) => sortByObject[a[sortField]] - sortByObject[b[sortField]]
  );
};

此函数的参数是一个对象,里面有三个属性,data是待排序的数组,sortBy是存放排序规则的数组,sortField则是根据哪一个字段进行排序。

比方说我们有以下数组:

const tasks = [
  { id: 1, title: "Job A", status: "done" },
  { id: 2, title: "Job B", status: "inProgress" },
  { id: 3, title: "Job C", status: "todo" },
  { id: 4, title: "Job E", status: "inProgress" },
  { id: 5, title: "Job F", status: "todo" }
];

现在想对它进行排序,并且是依据status字段的自定义排序,假设我们想把status值为"inProgress"的排在最前,其次是值为"todo",最后是值为"done"的:

const sortBy = ["inProgress", "todo", "done"];

调用自定义排序函数,对status属性进行排序:

customSort({ data: tasks, sortBy, sortField: "status" });


本文转载自:
作者:HEY_439
链接:https://www.jianshu.com/p/c9b909afc7e8

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值