Given this:
state = Immutable.fromJS({
selectedTrackIds: ['foo', 'bar', 'baz'],
});
Is there a way to get a new state where 'foo' and 'baz' are removed from selectedTrackIds
, using a single statement (using only Immutable and plain JS)? Or will I just have to use lodash?
return state.set('selectedTrackIds', Immutable.fromJS(_.difference(
state.get('selectedTrackIds').toJSON(), ['foo', 'baz']
)));
You can use filter
to remove the items you don't want:
return state.set('selectedTrackIds',
state.get('selectedTrackIds').filter(function(x) {
return ['foo', 'baz'].indexOf(x) < 0; // false return value => remove from list
})
);
Or combine it with map
, and some ES6 syntax:
state.map(x => x.filter(y => ['foo', 'baz'].indexOf(y) < 0))
(filter
and map
are standard JS, and Immutable provides its own implementations that work directly with Immutable collections)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With