我正在尝试在Immutablejs中执行复杂的删除,没有,我似乎总是这么做,在过程中转换为JS。
在以下数组中,我想删除每隔一个{y: }
对象
series: [
{
name:"1",
data: [
{y: 1},
{y: 2},
{y: 3}
]
},
{
name:"2",
data: [
{y: 1},
{y: 2},
{y: 3}
]
},
{
name:"3",
data: [
{y: 1},
{y: 2},
{y: 3}
]
}
]
所以我会得到这个:
series: [
{
name:"1",
data: [
{y: 1},
{y: 3}
]
},
{
name:"2",
data: [
{y: 1},
{y: 3}
]
},
{
name:"3",
data: [
{y: 1},
{y: 3}
]
}
]
有人能指出我正确的方向如何使用 ImmutableJS 吗?如果我只是使用过滤器或数组减少,我可以得到一个非常干净的解决方案,如下所示:
series.forEach(function (elem) {
let data = elem.data;
data.splice(index, 1);
});
我只是希望不变的有一个同样干净的解决方案。
removeIn的文档不够深入: https://facebook.github.io/immutable-js/docs/#/removeIn
答案 0 :(得分:1)
您正在修改series
的每个元素,因此我认为您使用.map()
进入了正确的轨道。然后你想使用.removeIn
来深深删除某些东西。
let seriesList = Immutable.fromJS(series)
seriesList = seriesList.map(elem =>
elem.removeIn(['data', indexToRemove]));
// equivalent form with .update() instead of .removeIn()
seriesList = seriesList.map(elem =>
elem.update('data', data => data.remove(indexToRemove)));
答案 1 :(得分:0)
我设法使用' map'来自不可变列表。这对我有用:
seriesList = Immutable.List(seriesList);
seriesList = seriesList.map(
elem => {
let data = elem.getIn(['data'])
data = data.remove(index)
elem = elem.setIn(['data'], data)
return elem
})
任何人都有更好的东西吗?