我正在努力更好地理解并开始用更高的函数编写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);据我理解,当使用数组和isNumber参数调用每个()函数时,每个函数都会运行。当每个函数被调用时,它用arrayi调用isNumber函数,然后调用带有arrayi的isNumber函数,如果arrayi的类型是一个数字,它会将该数字*2推送到一个数组中。我期望的输出是
[2, 4, 6, 8] since "String" is not a number it never got pushed into the array.我没有正确理解这一点吗?当我尝试记录这段代码时,没有显示输出。
发布于 2015-07-01 19:17:51
我想这对你有用:
// 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)); 发布于 2015-07-01 19:14:42
没有显示输出,因为您的两个函数都没有返回任何内容。
在这里,我希望您的回调只需应用乘法并返回该值,然后推送到每个函数中的数组中。
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;
}
}https://stackoverflow.com/questions/31169722
复制相似问题