繁体   English   中英

2个回调函数合二为一

[英]Combining 2 Callback Functions into One

这是问题...

“在标记为“ADD CODE HERE”的地方向函数thenCallback添加代码,以实现所需的控制台日志。使用thenCallback将两个回调合并为一个回调,然后将该回调传递给filterArray的结果应与以下结果匹配只需将两个回调传递到前一个挑战中的任过滤器。”

这是我知道有效的上一个挑战的解决方案......

function eitherFilter(array, callback1, callback2) {
  // ADD CODE HERE
  const newArr = [];
  for (let i = 0; i < array.length; i++) {
    if (callback1(array[i]) || callback2(array[i])) {
      newArr.push(array[i]);
    }
  }
  return newArr;
}

// Uncomment these to check your work!
 const arrOfNums = [10, 35, 105, 9];
 const integerSquareRoot = n => Math.sqrt(n) % 1 === 0;
 const over100 = n => n > 100;
 console.log(eitherFilter(arrofNums, integerSquareRoot, over100)); // should log: [105, 9]

这是给出的代码...

function eitherCallback(callback1, callback2) {
  // ADD CODE HERE
}

// Uncomment these to check your work!
 function filterArray(array, callback) {
   const newArray = [];
   for (let i = 0; i < array.length; i += 1) {
     if (callback(array[i], i, array)) newArray.push(array[i]);
   }
   return newArray;
 }
 const arrOfNums = [10, 35, 105, 9];
 const integerSquareRoot = n => Math.sqrt(n) % 1 === 0;
 const over100 = n => n > 100;
 const intSqRtOrOver100 = eitherCallback(integerSquareRoot, over100);
 console.log(filterArray(arrOfNums, intSqRtOver100)); // should log: [105, 9]

我很困惑该怎么做。 谁能给我一些提示? 我什至不知道如何开始回答它!

提前致谢...

你不需要太多 - 你需要做的eitherCallbackeitherCallback成为一个高阶函数,它将两个回调作为初始参数,并执行并返回你在这里执行的逻辑:

callback1(array[i]) || callback2(array[i])

喜欢:

 const eitherCallback = (callback1, callback2) => x => callback1(x) || callback2(x); // Uncomment these to check your work! function filterArray(array, callback) { const newArray = []; for (let i = 0; i < array.length; i += 1) { if (callback(array[i], i, array)) newArray.push(array[i]); } return newArray; } const arrOfNums = [10, 35, 105, 9]; const integerSquareRoot = n => Math.sqrt(n) % 1 === 0; const over100 = n => n > 100; const intSqRtOrOver100 = eitherCallback(integerSquareRoot, over100); console.log(filterArray(arrOfNums, intSqRtOrOver100)); // should log: [105, 9]

你也可以试试:

function eitherCallback(callback1, callback2) {
  // ADD CODE HERE
  return (element, i, array) => {
   //element representing array[i] 
    return callback1(element, i, array) || callback2(element, i, array);
  }
}

这个想法是让 anotherCallback 为函数内调用的任一回调返回一个真正的值。 此外,我相信某些性能的先前解决方案中的“x”表示参数 array[i]、i 和 array。 这只是一种用 x 写出来的更简洁的方法,而不必全部重复。 保持干燥。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM