javascript - 使用 immutable.js 有条件地构建列表

标签 javascript ecmascript-6 immutable.js

我们的代码库一直在努力使用 const 而不是 let,并尽可能使用 immutable.js。在大多数情况下,这非常容易,尽管我发现这段代码看起来错误,但想不出更好的方法来做到这一点,而不需要改变数组并只执行 List(arr)。代码被简化为表达我的观点所需的代码。

const item1 = item1Condition ? Map(...) : null;
const item2 = item2Condition ? Map(...) : null;
const item3 = item3Condition ? Map(...) : null;
return List([item1, item2, item3]).filter(item => item != null);

通常我会做类似的事情

const arr = [];
if (condition1) arr.push(Map(...));
...
return List(arr);

但这并不让人感觉一成不变。有没有更不可变的方法来制作这样的列表?

最佳答案

我将使用 zipreduce 的组合来解决您的问题,例如如下所示:

function zip(a, b) {
  return a.map(function(e, i) {
    return [e, b[i]];
  });
}

function doStuff(conditions, values) {
  return zip(conditions, values).reduce(function(res, el) {
    if(el[0]) {
      return [...res, el[1]];
    } 
    return res;
  }, []);
}

let conditions = [true, false, true];
let values = ['value1', 'value2', 'value3'];
console.log(doStuff(conditions, values));

要么您可以使用类似 compact function from lodash 的解决方案

关于javascript - 使用 immutable.js 有条件地构建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47065046/

相关文章:

javascript - Fittext 不适用于 WordPress 帖子

带有没有默认导出的模块的 Angular AOT/Rollup(如 immutable.js、moment.js)

javascript - 如何为动态聊天室配置 Autobahn(crossbar.io)?

javascript - Route.get() 需要回调函数,但修改服务器路由后得到一个 [object Undefined]

JavaScript .map 返回

ecmascript-6 - 在服务 worker 中使用 browser.js

javascript - dist 文件夹在节点模块中始终可用

javascript - React typescript 不可分配给类型参数

immutable.js - 使用 Immutable.js 在 OrderedMap 中添加一个项目

javascript - 已安装不可变但仍显示未定义