从索引数组重新排序immutable.js List

时间:2017-12-29 07:12:31

标签: javascript arrays immutable.js immutablelist

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

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

在dragEnd上,该事件为我提供了一个列表新顺序的数组,但除了引用前一个订单的索引外,它没有给我任何真正识别列表项的内容。

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

我需要根据这些索引发送一个新的重新排序的不可变数据列表来更新我的商店,但还没有找到一种雄辩和简洁的方法来做到这一点。我想也许有些使用sortBy或者可能从第一个列表创建一个orderedMap并从newOrder数组引用它来创建orderedList? Haven能够得到任何可行的解决方案。

需要派遣:

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

最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

我认为你可以使用map:



100%

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
  )
);