一次从不可变列表中删除多个项目

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))

filtermap 是标准的 JS,Immutable 提供了自己的实现,直接与 Immutable 集合一起工作)