2016-01-27 42 views
0

是否有一个Immutable.Set的单行程序,将根据bool添加()或删除()值?ImmutableJS.Set - 根据bool添加或删除

当然,这是可以做到的:

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

但是我正在寻找一个班轮我可以轻松地拖放到一个对象字面声明就像一个阵营的setState:

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

三级运营商的工作,但它的丑陋:

this.setState({ mySet: shouldHaveValue ? mySet.add(value) : mySet.remove(value)}); 

嗯......好吧,这不是坏...但还是:有没有这所有功能于一身的不可变的方法是什么?

+2

'Immutable.Set'不提供 “无丑” 的方式来做到这一点。 – zerkms

回答

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); 
    }; 
    }; 
}; 
相关问题