ImmutableJS.Set - 根据bool添加或删除

时间:2016-01-27 23:37:08

标签: javascript set immutable.js

对于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方法?

1 个答案:

答案 0 :(得分:1)

为什么不为它写一个函数?

this.setState({ mySet: modify(mySet)(value)(shouldHaveValue) })

然后编写一个单行函数,如:

const modify = set => value => shouldBe => shouldBe === value ? set.add(value) : set.remove(value)

我不确定您使用Sets的原因,但是如果您使用MapsLists,则可以更新其值并使用谓词来确定是否创建了值

<强> ES5

var modify = function(set){
  return function(value){
    return function(shouldBe){
      return shouldBe === value ? set.add(value) : set.remove(value);
    };
  };
};