我正在try 按"title"属性对一个对象数组进行排序.如何切换按Asc排序和按Desc按钮切换?

我有以下内容,但数据不按切换排序

  const [text, setText] = useState('');

  const [data, setData] = useState([]);
  const [toggleFilter, setToggleFilter] = useState(false);

  const sortedArray = useMemo(
    () =>
      toggleFilter
        ? [...data].sort((a, b) => a.title - b.title)
        : [...data].sort((a, b) => b.title - a.title),
    [data, toggleFilter],
  );

  return (
    <View>
      <FlatList
        style={styles.flatlist}
        data={sortedArray}
        renderItem={({ item }) => <Text>{item.title}</Text>}
        keyExtractor={(item) => item.id}
      />
      <View style={styles.container}>
    
        <Pressable
          style={styles.button}
          onPress={() => setToggleFilter(!toggleFilter)}
          testID="sort-direction">
          <Text style={styles.text}>{toggleFilter ? '⬇️' : '⬆️'}</Text>
        </Pressable>

      </View>
    </View>
  );
};

推荐答案

我找到了解决这个问题的办法!

所以问题出在这个场景中的排序.

在下面的代码中,我只使用了一种排序,还有String原型"localCompare".

注意:同样可以用"sort"函数实现,但"localCompare"很适合你的问题陈述

const [data, setData] = useState([{ title: 'A' }, { title: 'B' }, { title: 'C' }, { title: 'D' }, { title: 'E' }]);
const [toggleFilter, setToggleFilter] = useState(false);

const sortedArray = useMemo(
    () => data.sort((a, b) => (toggleFilter ? b.title.localeCompare(a.title) : a.title.localeCompare(b.title))),
    [data, toggleFilter]
);

return (
    <View>
        <FlatList
            style={styles.flatlist}
            data={sortedArray}
            renderItem={({ item }) => <Text>{item.title}</Text>}
            keyExtractor={item => item.id}
        />

        <Pressable style={styles.button} onPress={() => setToggleFilter(!toggleFilter)}>
            <Text style={styles.text}>{toggleFilter ? '⬇️' : '⬆️'}</Text>
        </Pressable>
    </View>
);

Javascript相关问答推荐

硬币兑换运行超时

Chart.js V4切换图表中的每个条,同时每个条下有不同的标签.怎么做?

将2D数组转换为图形

如何在angular中从JSON值添加动态路由保护?

浮动Div的淡出模糊效果

如何将Map字符串,布尔值转换为{key:string;value:bo布尔值;}[]?<>

空的结果抓取网站与Fetch和Cheerio

分层树视图

引用在HTMLAttributes<;HTMLDivElement>;中不可用

v—自动完成不显示 Select 列表中的所有项目

为什么Mutations 观察器用微任务队列而不是macrotask队列处理?

将核心模块导入另一个组件模块时存在多个主题

Web Crypto API解密失败,RSA-OAEP

从另一个数组中的对应行/键值对更新数组中的键值对对象

无法读取未定义的属性(正在读取合并)-react RTK

是否可以将异步调用与useState(UnctionName)一起使用

使用线性插值法旋转直线以查看鼠标会导致 skip

通过跳过某些元素的对象进行映射

我想为我的Reaction项目在画布上加载图像/视频,图像正在工作,但视频没有

使用jQuery每隔几秒钟突出显示列表中的不同单词