使用 immutablejs 深入删除数组
Deleting deep in an array with immutablejs
我正在尝试在 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 做到这一点?如果我只使用 filter 或 array reduce,我可以得到一个非常干净的解决方案,如下所示:
series.forEach(function (elem) {
let data = elem.data;
data.splice(index, 1);
});
我只是希望 immutable 有一个同样干净的解决方案。
removeIn 的文档不够深入:
https://facebook.github.io/immutable-js/docs/#/removeIn
我设法使用不可变列表中的 '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
})
有人有更好的东西吗?
您正在修改 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)));
我正在尝试在 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 做到这一点?如果我只使用 filter 或 array reduce,我可以得到一个非常干净的解决方案,如下所示:
series.forEach(function (elem) {
let data = elem.data;
data.splice(index, 1);
});
我只是希望 immutable 有一个同样干净的解决方案。
removeIn 的文档不够深入: https://facebook.github.io/immutable-js/docs/#/removeIn
我设法使用不可变列表中的 '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
})
有人有更好的东西吗?
您正在修改 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)));