var oldArray = [36, 29, 18, 7, 46, 53];
var newArray = oldArray
.filter(isEven)
.map(double)
.filter(passSixty)
.map(addFive);
console.log (newArray); // 返回:[77,97]
以上代码会产生 4个中间过程数组,会导致性能问题 可以通过组合或者管道进行优化, 下面优化后只需遍历一遍数据,且不会产生多次中间结果。
const filterTR = (condition) => (value) => value.filter(condition);
const mapTR = (mapValue) => (value) => value.map(mapValue);
function composeReducer(val, reducerlist) {
return reducerlist.reduce((total, cur) => cur(total), val);
}
function isEven(val) { return val % 2 === 0; }
function double(val) { return val * 2; }
function passSixty(val) { return val > 60; }
function addFive(val) { return val + 5; }
var oldArray = [36, 29, 18, 7, 46, 53];
var newArray = composeReducer(oldArray, [filterTR(isEven), mapTR(double), filterTR(passSixty), mapTR(addFive)]); console.log(newArray); // 返回:[77,97]