【问题标题】:ImmutableJS.Set - Add or Remove depending on boolImmutableJS.Set - 根据 bool 添加或删除
【发布时间】:2016-01-27 23:37:08
【问题描述】:

Immutable.Set 是否有一个单行代码,可以根据布尔值添加()或删除()一个值?

当然可以这样做:

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 方法来解决这个问题?

【问题讨论】:

  • Immutable.Set 没有提供“不丑”的方式来做到这一点。

标签: javascript set immutable.js


【解决方案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);
    };
  };
};

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 2023-01-22
    • 2021-04-08
    相关资源
    最近更新 更多