我们正在将我们的强制性大脑转变为一个功能最强大的范例。这个功能给我带来麻烦。我想构建一个数组,其中包含两对或三对,具体取决于条件(是否refreshToken
是null
)。我怎样才能用FP范式干净地做到这一点?当然,对于命令式的代码和变异,我只是有条件地把.push()
的额外值加到看起来很干净的结尾上。如何使用不变性和函数式编程实践构建具有多种可能长度的数组?
这是一个“局部变异是好的”FP预警的例子吗?
(我们在用打字原稿到ReadonlyArray
强制更改的,这使得这个有点更难看。)
const itemsToSet = [
[JWT_KEY, jwt],
[JWT_EXPIRES_KEY, tokenExpireDate.toString()],
[REFRESH_TOKEN_KEY, refreshToken /*could be null*/]]
.filter(item => item[1] != null) as ReadonlyArray<ReadonlyArray<string>>;
AsyncStorage.multiSet(itemsToSet.map(roArray => [...roArray]));
您的解决方案看起来非常合理,性能可能不是三个元素数组的关注点。我认为这里没有地方突变;你不能引用被突变的原始数组,所以即使发生变异也没有办法观察到变异(编译器可以选择精确地优化初始数组的构造,因为没有可能的方法来引用它) 。即使在Haskell中,运行时也可以在一个地方更新一个值。结论是“突变”=“可观察到的突变”,即“局部突变可以”。 – user2407038
这是JavaScript。只需使用'.push'。 –