Переупорядочить список immutable.js из массива индексов

У меня есть неизменный список, который заполняет функцию перетаскивания (в элементе списка нет идентификаторов, кроме их индексов при отображении через них).

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

На dragEnd событие дает мне массив нового порядка списка, но не дает мне ничего, чтобы действительно идентифицировать элементы списка, кроме ссылки на индексы предыдущего порядка.

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

Мне нужно отправить новый переупорядоченный список неизменяемых данных, основанный на этих индексах, чтобы обновить мой магазин, но мне еще предстоит найти красноречивый и лаконичный способ сделать это. Я подумал, может быть, какое-то использование sortBy или, возможно, создание orderMap из первого списка и ссылки на него из массива newOrder для создания orderList?? Не удалось заставить что-либо работать, что кажется хорошим решением.

Необходимо отправить:

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

Каков был бы лучший способ сделать это?

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>

Другие вопросы по тегам