【问题标题】:React Native - FlatList ordering without sorting dataReact Native - FlatList 排序而不对数据进行排序
【发布时间】:2017-12-27 00:49:46
【问题描述】:

有没有办法在不对数据源进行排序的情况下按特定顺序呈现Flatlist 行?

示例

<FlatList
  data={[{key: 'a'}, {key: 'c'}, {key: 'b'}]}
  renderItem={({item}) => <Text>{item.key}</Text>}
/>

上面的代码渲染了一个列表

a
c
b

有没有办法让它在不对数据源进行排序的情况下呈现以下内容?

a
b
c

【问题讨论】:

  • 我会说不。您想要的输出的标准/标准是什么?是按字母排序的吧?
  • 没有,但是你为什么需要?
  • 这是我面临的真正问题的更简单示例。我在normalized state 中有一个数据源,所以我的所有对象都由 id 引用。我想以 id 以外的顺序显示列表,而不必对整个事物进行排序,这可能很大。

标签: javascript react-native react-native-flatlist


【解决方案1】:

基本上你是在说,我想要 Pizzar,但不要用香肠、肉等。因此答案是否定的。

为了进行高效排序和排序,可以试试linq.js

linq.js,简而言之就是 LINQ for JavaScript。一些特别有用/相关的功能包括:

  • 实现所有 .NET 4.0 方法和许多额外的方法(灵感来自 Rx、Achiral、Haskell、Ruby 等...)
  • 完成lazy evaluation
  • 为 JavaScript(RxJS) 和 IntelliSense 的响应式扩展绑定

如果 Linq.JS 可以解决你的性能问题,你应该先排序,然后渲染排序后的数据源。

另一种选择是使用lodash,据称性能更好,详情见this link

以下是对一些数据进行排序的代码 sn-ps: LINQ.JS:

var queryResult = $.Enumerable.From(jsonArray)
  .OrderBy(function(x) {
    return x.user.screen_name
  })
  .Select(function(x) {
    return x.user.screen_name + ':' + x.text
  })
  .ToArray();

罗达什:

var queryResults = _.chain(jsonArray)
.sortBy(function (x) { return x.user.screen_name })
.map(function(x) {
    return x.user.screen_name + ':' + x.text
  })
.value();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 2013-11-29
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多