Переупорядочить список 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>