【问题标题】:Is there a null-conditional operator for array concatenation?是否有用于数组连接的空条件运算符?
【发布时间】:2021-01-06 22:32:42
【问题描述】:
const addendum = null
const acts.change = [act1];
console.log( acts.change.concat(addendum?.changedActions) );

输出 [act1, null] 而不是预期的 [act1]。我是误用了空条件运算符还是是

console.log( addendum ? acts.change.concat(addendum?.changedActions) : acts.change )

获得我想要的东西的最佳/最简单的方式?

【问题讨论】:

  • 您是指optional chaining operator 吗?根据那里记录的语义,除了将undefined 传递给.concat 作为第二个参数之外,我不希望它做任何事情,对吧?
  • 无论如何,你的第二个版本比假设的版本更容易阅读;更进一步,我实际上建议使用 if/else 语句对。 首先让您的代码易于阅读。
  • 你也可以acts.change.concat(addendum?.changedActions??""))
  • const acts.change 语法无效。
  • @emrhzc 不应该是??[]吗?

标签: javascript null-conditional-operator


【解决方案1】:

没有任何内置功能可以让concat() 忽略该参数。所以你需要用一个空数组替换一个未定义的参数,以便什么都不连接。

除了条件链接之外,您还可以使用null coalescing 运算符:

addendum?.changedActions??[]

要进一步减少语法,请使用 ES6 省略号而不是调用 concat()

console.log([...acts.change, ...addendum?.changedActions??[]])

【讨论】:

    【解决方案2】:

    谢谢,朋友们,测试表明

    acts.change.concat(addendum?.changedActions??[]))
    

    是我正在寻找的行为。

    【讨论】:

    • 更易读(并且向后兼容和高性能)的形式是if(addendum) acts.change.concat(addendum.changedActions);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 2018-01-08
    • 2014-09-07
    • 1970-01-01
    • 2017-08-25
    • 2022-11-25
    相关资源
    最近更新 更多