【问题标题】:Re-order an immutable.js List from an array of indices从索引数组中重新排序 immutable.js 列表
【发布时间】:2018-06-09 16:13:08
【问题描述】:

我有一个填充拖放列表功能的不可变列表(在通过它们进行映射时,除了它们的索引之外,列表项上没有 id)。

const list = Immutable.List([{"alias":"cat"},{"alias":"dog"},{"alias":"rat"}])

在 dragEnd 上,该事件为我提供了一个包含列表新顺序的数组,但除了引用前一个顺序的索引之外,没有给我任何东西来真正识别列表项。

const newOrder = [{"order":1},{"order":0},{"order":2}]

我需要根据这些索引调度一个新的重新排序的不可变数据列表来更新我的商店,但还没有找到一个雄辩而简洁的方法来做到这一点。我在想也许使用 sortBy 或者从第一个列表创建一个 orderedMap 并从 newOrder 数组中引用它来创建orderedList?无法让任何似乎是好的解决方案发挥作用。

需要派送:

const orderedList = Immutable.List([{"alias":"dog"},{"alias":"cat"},{"alias":"rat"}])

最好的方法是什么?

【问题讨论】:

    标签: javascript arrays immutable.js immutablelist


    【解决方案1】:

    我认为你可以使用地图:

    const newOrder = [{"order":1},{"order":0},{"order":2}];
    
    const ordered = 
    Immutable.List([1,2,3])
      .map(
        (item,index,all)=>
          all.get(newOrder[index].order)
        );
    
    console.log(
      JSON.stringify(
        ordered.toArray(),
        undefined,
        2
      )
    );
    <script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.2/immutable.min.js"></script>

    【讨论】:

    • 感谢 HMR,这对我有用。我想我把它复杂化了!感谢您的帮助!
    猜你喜欢
    • 2017-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多