2017-08-07 92 views
-1

我創建一個each函數來處理不同類型的回調,如返回元素不起作用 - JS

  • iterateCollection的 - W/C剛剛返回/打印數組或對象的項目

  • returnEvenElements - W/C返回甚至數組元素

  • returnKeyDivisbleBy3 - W/C返回按3

  • returnKeyWithArrayValue aredivisible數組元素 - 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);

但在傳遞上下文,它不返回任何東西,即使其中一個不工作。我使用'return'關鍵字來返回元素,但沒有將它們打印在屏幕上或記錄它們。

想知道我是否缺少什麼?請幫忙!

+0

您需要回電話後出,在每個功能 –

+0

回報回調(集合[1]);試過這個,但我的函數不會返回任何東西。 –

+0

@JamesHedegon如果你寫'return callback(collection [i]);'那麼它會返回一些東西,看看[fiddle](https://jsfiddle.net/8w88e1w8/)。它可能不會返回你想要的,但它返回一些東西。 –

回答

1

問題是你沒有設置回調的任何值返回。將回調設置爲數組,然後從each函數中返回該值。

我縮小了代碼,並給出了一個例子fo 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)); 
+0

你能給我一個對象的例子嗎? –

+0

示例爲returnKeyWithArrayValue –