0

我有一个填充拖放列表功能的不可变列表(通过它们进行映射时,除了它们的索引之外,列表项上没有 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"}])

最好的方法是什么?

4

1 回答 1

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>

于 2017-12-29T08:50:39.907 回答