我目前正在使用Codesmith的CSX,遇到了这个问题。这个想法是创建一个函数,该函数将两个回调作为参数,并且如果传递的任何输入中的任何一个返回了传递的函数。我不知道如何访问输入数据。抱歉,如果我不够清楚。
function eitherCallback(cb1, cb2) {
// ADD CODE HERE
}
//please try to solve without editing the code underneath
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]
答案 0 :(得分:1)
您只需要让eitherCallback
返回一个接受数组项并测试其是否通过cb1
或cb2
的测试的函数即可:
function eitherCallback(cb1, cb2) {
return item => cb1(item) || cb2(item);
}
//please try to solve without editing the code underneath
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]
另一种思考方式-如果您有两个回调,并且希望通过某项是否通过任一回调来过滤数组,则可以这样做:
arr.filter(
item => cb1(item) || cb2(item)
);
这是同一回事,不同之处在于该函数是通过一些令人困惑的附加抽象级别进行漏斗的。