我们的代码库一直在努力使用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);
但这并不是一成不变的。是否有更不可变的方式来制作这样的列表?
答案 0 :(得分:0)
我会使用zip
和reduce
的组合解决您的问题,例如:
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