我如何在不可变地图中排序(交换)项目?
How do i sort (swap) items inside an Immutable Map?
我想交换 Map
内的不可变列表中的项目,
示例:
const Map = Immutable.fromJS({
name:'lolo',
ids:[3,4,5]
});
我正在尝试使用 splice 进行交换,还尝试使用 insert()
一种不可变方法。
假设我想从 [3, 4, 5]
切换到 [3, 5, 4]
,我正在做这样的事情:
list.set('ids', list.get('ids').splice(2, 0, list.get('ids').splice(1, 1)[0])
使用 Immutable.js 对不可变数据结构中的元素进行排序的最佳方法是什么?
您可以使用解构赋值来交换数组不同索引处的值
const list = Immutable.fromJS({name:'lolo',ids:[3,4,5]});
[list._root.entries[1][1]._tail.array[1], list._root.entries[1][1]._tail.array[2]] = [
list._root.entries[1][1]._tail.array[2]
, list._root.entries[1][1]._tail.array[1]
];
console.log(list.get("ids").toArray());
你应该使用 Map.update()
and List.withMutations()
:
map.update('ids', idsList => idsList.withMutations(function (idsList) {
let temp = idsList.get(2);
return idsList.set(2, idsList.get(1)).set(1, temp);
}));
请注意,我将您的 list
重命名为 map
- 这实际上是一个 Map
。
对于简单的排序,请选择
map.update('ids', idsList => idsList.sort(function (a, b) {
// magic
});
参数化:
function swap(map, key, from, to) {
return map.update(key, list => list.withMutations(list => {
let soruce = list.get(from);
let destination = list.get(to);
return list.set(to, soruce).set(from, destination);
}));
}
我想交换 Map
内的不可变列表中的项目,
示例:
const Map = Immutable.fromJS({
name:'lolo',
ids:[3,4,5]
});
我正在尝试使用 splice 进行交换,还尝试使用 insert()
一种不可变方法。
假设我想从 [3, 4, 5]
切换到 [3, 5, 4]
,我正在做这样的事情:
list.set('ids', list.get('ids').splice(2, 0, list.get('ids').splice(1, 1)[0])
使用 Immutable.js 对不可变数据结构中的元素进行排序的最佳方法是什么?
您可以使用解构赋值来交换数组不同索引处的值
const list = Immutable.fromJS({name:'lolo',ids:[3,4,5]});
[list._root.entries[1][1]._tail.array[1], list._root.entries[1][1]._tail.array[2]] = [
list._root.entries[1][1]._tail.array[2]
, list._root.entries[1][1]._tail.array[1]
];
console.log(list.get("ids").toArray());
你应该使用 Map.update()
and List.withMutations()
:
map.update('ids', idsList => idsList.withMutations(function (idsList) {
let temp = idsList.get(2);
return idsList.set(2, idsList.get(1)).set(1, temp);
}));
请注意,我将您的 list
重命名为 map
- 这实际上是一个 Map
。
对于简单的排序,请选择
map.update('ids', idsList => idsList.sort(function (a, b) {
// magic
});
参数化:
function swap(map, key, from, to) {
return map.update(key, list => list.withMutations(list => {
let soruce = list.get(from);
let destination = list.get(to);
return list.set(to, soruce).set(from, destination);
}));
}