我试图更好地理解并开始使用更高阶函数编写JS。下面只是我正在做的一个练习,我想输出一个数字数组* 2.
function each(collection, callback) {
for(var i = 0; i < collection.length; i++) {
callback(collection[i]);
}
}
function isNumber(item) {
var arr = [];
if(typeof item === "number") {
arr.push(item * 2);
}
return arr;
}
each([1, 2, 3, 4, "String"], isNumber);
从我的理解,当使用array和isNumber参数调用each()函数时,它通过函数运行。当调用每个函数时,它使用array [i]调用isNumber函数,然后调用isNumber函数调用该数组[i],如果数组[i]的类型是数字,则将该数字* 2推送到阵列。我预期的输出是
[2, 4, 6, 8] since "String" is not a number it never got pushed into the array.
我没有正确理解这个吗?当我尝试记录此代码时,没有输出显示。
答案 0 :(得分:2)
没有显示任何输出,因为你的函数都没有返回任何内容。
在这里,我的回调只是应用乘法并返回该值,然后推送到每个函数中的数组
function each(collection, callback) {
var arr = [];
for(var i = 0; i < collection.length; i++) {
var result = callback(collection[i])
if (typeof result !== 'undefined') {
arr.push(callback(collection[i]));
}
}
return arr
}
function isNumber(item) {
if (typeof item === "number") {
return item * 2;
}
}
答案 1 :(得分:2)
我认为这对你有用:
// Let's call this what it is
function getNumbersFromArray(collection, callback) {
var arr = [],
i = 0;
for (; i < collection.length; i++) {
// Check if isNumber and do mutliplication here
if (callback(collection[i])) {
arr.push(item * 2);
}
}
return arr;
}
// Make isNumber actually return a boolean
function isNumber(item) {
return typeof item === "number";
}
// call console.log()
console.log(getNumbersFromArray([1, 2, 3, 4, "String"], isNumber));