有条件地使用immutable.js构建一个列表

时间:2017-11-01 23:07:03

标签: javascript ecmascript-6 immutable.js

我们的代码库一直在努力使用consts而不是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);

但这并不是一成不变的。是否有更不可变的方式来制作这样的列表?

1 个答案:

答案 0 :(得分:0)

我会使用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

之类的解决方案来使用您的解决方案