一次从不可变列表中删除多个项目
Remove multiple items from Immutable List in one shot
鉴于此:
state = Immutable.fromJS({
selectedTrackIds: ['foo', 'bar', 'baz'],
});
有没有一种方法可以使用单个语句(仅使用不可变和纯 JS)从 selectedTrackIds
中删除 'foo' 和 'baz' 以获得新状态?还是我只需要使用 lodash?
return state.set('selectedTrackIds', Immutable.fromJS(_.difference(
state.get('selectedTrackIds').toJSON(), ['foo', 'baz']
)));
您可以使用 filter
删除不需要的项目:
return state.set('selectedTrackIds',
state.get('selectedTrackIds').filter(function(x) {
return ['foo', 'baz'].indexOf(x) < 0; // false return value => remove from list
})
);
或者结合map
和一些ES6语法:
state.map(x => x.filter(y => ['foo', 'baz'].indexOf(y) < 0))
(filter
和 map
是标准的 JS,Immutable 提供了自己的实现,直接与 Immutable 集合一起工作)
鉴于此:
state = Immutable.fromJS({
selectedTrackIds: ['foo', 'bar', 'baz'],
});
有没有一种方法可以使用单个语句(仅使用不可变和纯 JS)从 selectedTrackIds
中删除 'foo' 和 'baz' 以获得新状态?还是我只需要使用 lodash?
return state.set('selectedTrackIds', Immutable.fromJS(_.difference(
state.get('selectedTrackIds').toJSON(), ['foo', 'baz']
)));
您可以使用 filter
删除不需要的项目:
return state.set('selectedTrackIds',
state.get('selectedTrackIds').filter(function(x) {
return ['foo', 'baz'].indexOf(x) < 0; // false return value => remove from list
})
);
或者结合map
和一些ES6语法:
state.map(x => x.filter(y => ['foo', 'baz'].indexOf(y) < 0))
(filter
和 map
是标准的 JS,Immutable 提供了自己的实现,直接与 Immutable 集合一起工作)