首页 > 解决方案 > '也许推'的Javascript声明/不可变版本?

问题描述

我有这样的代码:

A = [1,2,3]
if (condition) {A.push(4)}
A.push(5)

但是我的数组实际上是不可变的,所以我不能这样做。我怎样才能在一个表达式中完成所有操作?我不希望中间有一个空值。

标签: javascriptfunctional-programmingimmutability

解决方案


这是一种方法:

A = [1, 2, 3, ...(condition ? [4] : []), 5]

如果这在您的代码库中很常见,并且您希望保持未定义,那么您可以编写一个带有哨兵的过滤器函数。

const REMOVE = symbol('removeme')
const A = clean([1, 2, 3, condition ? 4 : REMOVE, 5])
function clean(arr) {return arr.filter(x=>x!==REMOVE)}

推荐阅读