【问题标题】:Set multiple const values based on conditional根据条件设置多个 const 值
【发布时间】:2020-07-08 03:07:02
【问题描述】:

我想根据条件设置多个值。这段代码可以工作:

let a;
let b;

if (fooBar) {
  a = "foo";
  b = "bar";
} else {
  a = "baz";
  b = "Hello world!";
}

但我正在努力遵守 FP(不可变变量)和 DRY 原则。

对于一个变量,我会这样做:

const a = fooBar
  ? "foo"
  : "baz";

我可以这样设置多个变量吗?

【问题讨论】:

    标签: javascript ecmascript-6 functional-programming immutability dry


    【解决方案1】:

    总体而言,我认为使用let 没有错,但是您的问题的答案是:

    const [a, b] = fooBar ? ["foo", "bar"] : ["baz", "Hello world!"]
    

    在这种情况下,可以使用数组解构。所以我们创建变量来通过索引访问数组项(a 是#0,b 是#1)

    【讨论】:

      【解决方案2】:

      使用三元生成具有所需值的对象或数组,然后使用解构来分配它们:

      const fooBar = false
      
      const { a, b } = fooBar ? 
        { a: 'foo', b: 'bar' } 
        : 
        { a: 'baz', b: 'Hello world!' }
        
      console.log(a, b)

      【讨论】:

      • 这里的代码节省不多——实际上比以前大了
      • 请求是不可变变量,不保存字符。
      • 我喜欢更详细的选项,它不依赖或顺序,但我也提到了数组选项。
      • @OriDrori DRY 也是一个要求,但这并没有实现。
      • 干燥度在于逻辑和赋值。属性的名称是较小的开销。再一次 - 我确实提到了数组作为一个选项。使用任何你喜欢的东西。
      【解决方案3】:

      我不明白为什么每个人都如此沉迷于解构。这不适合你吗?

      const a  = 1 ? 0 : -1,
            b = 0 ? 3 : -1;
      

      【讨论】:

      • 不满足DRY,这里需要写两次条件。
      • 1.如果两个变量有独立的条件怎么办? 2. Noobish,因为您在内存中创建了一个对象,然后在 2 个分配之上导致 2 个属性访问并将其发送到垃圾收集。在 OP 的情况下,DRY 并不重要。
      • 为了逻辑起见,写 2 个三元不是 DRY 但声明 2 个对象是 DRY ???...jeez
      • 这个问题与是否需要根据相同的条件设置两个值特别相关。否则我会使用这个解决方案。干杯
      猜你喜欢
      • 1970-01-01
      • 2012-09-01
      • 2020-12-13
      • 2023-03-27
      • 1970-01-01
      • 2022-10-08
      • 1970-01-01
      • 1970-01-01
      • 2018-04-30
      相关资源
      最近更新 更多