对于Immutable.Set,是否存在一个单行代码,它将根据bool添加()或remove()一个值?
当然可以通过以下方式完成:
if (listShouldHaveFooBool) {
mySet.add('foo');
}
else {
mySet.remove('foo');
}
但是有一个单行程会像这样工作吗? (使用伪造的.modify()方法)
// mySet = ['foo', 'bar', baz']
// listShouldHaveFooBool = false;
mySet.modify('foo', listShouldHaveFooBool);
// mySet = ['bar', baz']
listShouldHaveFooBool = true;
mySet.modify('foo', listShouldHaveFooBool);
// mySet = ['foo', 'bar', baz']
但是我正在寻找一个单行程,我可以轻松地将其放入像React setState这样的对象文字声明中:
this.setState({ mySet: mySet.modify(value, shouldHaveValue)});
第三级运营商会工作,但这很难看:
this.setState({ mySet: shouldHaveValue ? mySet.add(value) : mySet.remove(value)});
嗯......好吧,那还不错......但仍然是:这是否有一个一体化的Immutable方法?
答案 0 :(得分:1)
为什么不为它写一个函数?
this.setState({ mySet: modify(mySet)(value)(shouldHaveValue) })
然后编写一个单行函数,如:
const modify = set => value => shouldBe => shouldBe === value ? set.add(value) : set.remove(value)
我不确定您使用Sets
的原因,但是如果您使用Maps
或Lists
,则可以更新其值并使用谓词来确定是否创建了值
<强> ES5 强>
var modify = function(set){
return function(value){
return function(shouldBe){
return shouldBe === value ? set.add(value) : set.remove(value);
};
};
};