通过组合和管道优化 js 处理数组的性能

76 阅读1分钟
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]