0
function eitherCallback(callback1, callback2) {
  return (element, i, array) => {return callback1(element, i, array) || callback2(element, i, array)}
}

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; // condition 1 as a function
const over100 = n => n > 100; // condition 2 as a function

const intSqRtOrOver100 = eitherCallback(integerSquareRoot, over100); // function to combine functions

console.log(filterArray(arrOfNums, intSqRtOrOver100)); // should log: [105, 9]

Above is a piece of code that I've written for my coding bootcamp prep. However, I am confused on the purpose of the second "return" in the eitherCallback function. I have read the syntax on arrow functions in ES6 and I read that the return is not needed if the function is a single line. However, when I remove that second "return" the output of console.log(filterArray(arrOfNums, intSqRtOrOver100)); returns an empty array.

The eitherCallback function takes two arguments: callback1 and callback2, which are going to be functions integerSquareRoot and over100. When I look at those functions, the return of those two functions are booleans which leads me to my confusion. Since callback1 and callback2 already return booleans, why do I get an empty array if I omit the second "return" in the eitherCallback function?

Thank you.

lewislin
  • 21
  • 2
  • 4
    When you removed the second return, did you also remove the braces around `cb1 || cb2`? – Ben Mar 18 '22 at 23:19
  • _return is not needed if the function is a single line_ - good observation. This means that a function like `const someFn = () => { return someThing; };` will become like this: `const someFn = () => someThing; `. Another alternative is this: `const someFn = () => (someThing);`. Observe how `{ return .... }` is either removed or it is replaced with `( .... )`. Thus, `eitherCallback` may be replaced like so: `const eitherCallback = (cb1, cb2) => (e, i, ar) => ( cb1(e, i, ar) || cb2(e, i, ar) );` – jsN00b Mar 18 '22 at 23:55
  • This is a good resource about arrow functions: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions – Steve Mar 19 '22 at 00:13

0 Answers0