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

时间:2016-04-06 07:48:10

标签: javascript immutable.js

鉴于此:

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']
)));

1 个答案:

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

filtermap是标准的JS,而Immutable提供了自己的实现,可以直接使用Immutable集合。