鉴于此:
state = Immutable.fromJS({
selectedTrackIds: ['foo', 'bar', 'baz'],
});
有没有办法获得一个新的状态,其中' foo'和'巴兹'使用单个语句(仅使用Immutable和plain JS)从selectedTrackIds
中删除?或者我只需要使用lodash?
return state.set('selectedTrackIds', Immutable.fromJS(_.difference(
state.get('selectedTrackIds').toJSON(), ['foo', 'baz']
)));
答案 0 :(得分:6)
您可以使用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集合。