【问题标题】:Sort data in react table - not alphabitacelly, but specific order对反应表中的数据进行排序 - 不是按字母顺序排列,而是按特定顺序
【发布时间】:2021-04-16 03:19:57
【问题描述】:

我是第一次使用 React,我想按“状态”列对数据进行排序,但不是按字母顺序,而是按特定顺序,比如 B、A、C,反之亦然。

我的数据如下:

export interface Delivery {
  id: number;
  name: string;
  amount: number;
  status: string;
  eta?: number;
}

export const getDeliveries = (): Promise<Delivery[]> => {
  return new Promise((resolve) => {
    setTimeout(() => {
      const data = [
        {
          id: 1,
          name: "Delivery 1",
          amount: 3,
          status: "A",
          eta: 15
        },
        {
          id: 2,
          name: "Delivery 2",
          amount: 5,
          status: "C"
        },
        {
          id: 3,
          name: "Delivery 3",
          amount: 3,
          status: "A",
          eta: 10
        },
        {
          id: 4,
          name: "Delivery 4",
          amount: 4,
          status: "B"
        },
        {
          id: 5,
          name: "Delivery 5",
          amount: 3,
          status: "A",
          eta: 25
        },
        {
          id: 6,
          name: "Delivery 6",
          amount: 3,
          status: "C",
          eta: 5
        }
      ];

      resolve(data);
    }, 1000);
  });
};

感谢任何帮助或提示!

【问题讨论】:

    标签: javascript reactjs typescript html-table


    【解决方案1】:

    您可以使用带有自定义比较器的内置 Array.sort 对数据进行排序。

    1. 定义状态字段的排序顺序。
    2. 使用自定义比较器函数对数据数组进行排序,该函数根据您之前定义的状态顺序数组中的状态“值”比较两个数据点。

    const data = [{
        id: 1,
        name: "Delivery 1",
        amount: 3,
        status: "A",
        eta: 15
      },
      {
        id: 2,
        name: "Delivery 2",
        amount: 5,
        status: "C"
      },
      {
        id: 3,
        name: "Delivery 3",
        amount: 3,
        status: "A",
        eta: 10
      },
      {
        id: 4,
        name: "Delivery 4",
        amount: 4,
        status: "B"
      },
      {
        id: 5,
        name: "Delivery 5",
        amount: 3,
        status: "A",
        eta: 25
      },
      {
        id: 6,
        name: "Delivery 6",
        amount: 3,
        status: "C",
        eta: 5
      }
    ];
    const statusOrder = ["B", "A", "C"];
    
    data.sort((d1, d2) => statusOrder.indexOf(d1.status) - statusOrder.indexOf(d2.status));
    
    console.log(data);

    【讨论】:

    • note .sort 对数组进行变异,因此为了保持状态的不变性,您不能将其直接应用于状态变量,而是必须复制数组,对其进行变异,然后更新状态使用新数组。
    • @AnsonMiu 仅供参考 Jaro 要求您(和我)解决 interview challengejob application。不要这样做。您在这里的回答是对所提出问题的一个很好的回答。 “你能否尝试根据我的工作演示调整你的提示” - 让互联网陌生人填写你的工作申请需要很大的勇气。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2019-05-16
    • 2013-05-02
    相关资源
    最近更新 更多