ffx*_*sam 4 javascript immutable.js
鉴于这种:
state = Immutable.fromJS({
selectedTrackIds: ['foo', 'bar', 'baz'],
});
Run Code Online (Sandbox Code Playgroud)
有没有办法selectedTrackIds使用单个语句(仅使用Immutable和普通JS)获取一个新的状态,其中'foo'和'baz'被删除?或者我只需要使用lodash?
return state.set('selectedTrackIds', Immutable.fromJS(_.difference(
state.get('selectedTrackIds').toJSON(), ['foo', 'baz']
)));
Run Code Online (Sandbox Code Playgroud)
您可以使用filter删除不需要的项目:
return state.set('selectedTrackIds',
state.get('selectedTrackIds').filter(function(x) {
return ['foo', 'baz'].indexOf(x) < 0; // false return value => remove from list
})
);
Run Code Online (Sandbox Code Playgroud)
或者将它与map一些ES6语法结合使用:
state.map(x => x.filter(y => ['foo', 'baz'].indexOf(y) < 0))
Run Code Online (Sandbox Code Playgroud)
(filter并且map是标准的JS,而Immutable提供了自己的实现,可以直接使用Immutable集合)