Как преобразовать все значения в нижний регистр, чтобы отсортировать их

#reactjs #typescript

Вопрос:

У меня есть следующий код сортировки, и я хочу иметь возможность сортировать значения нижнего регистра в данных, а также прямо сейчас это сортирует только значения верхнего регистра

  const [data, setData] = useState<any[]>([]);
const sortCallback = (prop: string, direction: string) => (
    a: object,
    b: object
  ) => {
  
    if (a[prop] < b[prop]) {
      return direction === "asc" ? -1 : 1;
    }

    if (a[prop] > b[prop]) {
      return direction === "asc" ? 1 : -1;
    }

    return 0;
  };

  const sortData = (prop: string, direction: string) => {
    setData((data) => [...data].sort(sortCallback(prop, direction)));

    directionRef.current = {
      ...initDirection,
      [prop]: direction === "desc" ? "asc" : "desc",
    };
    activeRef.current = prop;
  };

  return { sortCallback, sortData, data, setData };
};
 

Ответ №1:

Я не уверен, что именно вы имеете в виду, когда говорите, что он сортирует только верхний регистр, но вы можете использовать .toLowerCase() так, чтобы строка, которую вы пытаетесь сравнить, была в нижнем регистре.

Также я рекомендую вам попробовать использовать .localeCompare() функцию для сравнения строк. Пример localeCompare с toLowerCase :

 stringA.toLowerCase().localeCompare(stringB.toLowerCase())
 

Ответ №2:

Вы можете просто использовать метод прописных букв: https://developer.mozilla.org/pl/docs/Web/JavaScript/Reference/Global_Objects/String/toLowerCase

Ответ №3:

Попробуйте это:

 const sortCallback = (prop: string, direction: string) => (
    a: object,
    b: object
  ) => {
  
    if (a[prop]. toLowerCase() < b[prop].toLoweCase()) {
      return direction === "asc" ? -1 : 1;
    }

    if (a[prop].toLowerCase() > b[prop].toLowerCase()) {
      return direction === "asc" ? 1 : -1;
    }

    return 0;
  };

 

дайте мне знать, если это сработает