我们的代码库一直在努力使用 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);
但这并不让人感觉一成不变。有没有更不可变的方法来制作这样的列表?
最佳答案
我将使用 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 的解决方案
关于javascript - 使用 immutable.js 有条件地构建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47065046/