我正在创建一个each
函数来处理不同类型的回调,例如
iterateCollection - w / c只返回/打印数组或对象项
returnEvenElements - w / c返回数组元素
returnKeyDivisbleBy3 - w / c返回可被3分开的数组元素
returnKeyWithArrayValue - w / c返回一个键或属性 具有数组值的对象。
这就是我的意思:
var myArray = [1, 2, 3, 4, 5];
var myObject = {
num1: 1,
num2: 2,
num3: [1, 2, 3]
};
function each(collection, callback) {
if (collection instanceof Array) {
for (var i = 0, l = collection.length; i < l; i++) {
callback(collection[i]);
};
} else if (collection instanceof Object) {
for (var prop in collection) {
callback(collection[prop]);
};
}
}
function returnKeyWithArrayValue(collection, prop) {
return collection[prop] instanceof Array;
}
function returnKeyDivisbleBy3(collection, prop) {
return collection[prop] % 3;
}
function returnEvenElements(collection) {
return (typeof collection === 'number') && !(collection % 2);
}
function iterateCollection(collection) {
return collection;
}
var output1 = each(myArray, returnEvenElements);
console.log(output1);
var output2 = each(myArray, iterateCollection);
console.log(output2);
var output3 = each(myObject, returnKeyWithArrayValue);
console.log(output3);
var output4 = each(myArray, returnKeyDivisbleBy3);
console.log(output4);
&#13;
但是在通过上下文后,即使其中一个不起作用,它也不会返回任何内容。我使用了&#39; return
&#39;返回元素的关键字,但不要在屏幕上打印或记录它们。
想知道我是否遗漏了什么?请帮忙!
答案 0 :(得分:1)
问题是您没有将回调设置为任何要返回的值。将回调设置为数组,然后将该值从each
函数中返回。
我精简了代码并举了一个例子returnEvenElements
。希望这会有所帮助。
我可以通过代码得到[2, 4, 6]
。
var myArray=[1,2,3,4,5, 6];
function each(collection, callback){
const returnArray = []; // <- create array to capture values
if(collection instanceof Array) {
for(var i=0, l=collection.length; i<l; i++){
if (callback(collection[i])){ // <- check if condition is true
returnArray.push(collection[i]); // <- set values in array
}
};
}
return returnArray; <- return the value
}
function returnEvenElements(collection){
return (typeof collection === 'number') && !(collection % 2);
}
var output1 = each(myArray, returnEvenElements);
console.log(output1);
PS - 尝试查看地图,过滤和减少。您可以使用 -
获取偶数const evens = myArray.filter(value => (value % 2 === 0));