2016-07-27 30 views
0

我目前在一個JavaScript崩潰的過程中,我目前卡在一塊代碼。您將在makeCountingFunction函數中看到我的評論,以查看im邏輯的進展情況。任何人都可以幫助澄清是怎麼回事?Javascript:計數奇數的數量

代碼中包含教師評論。

/** 
* 
* Independent Practice: Functions and Callbacks 
* 
* GOALS 
* 
* Your goal in this exercise is for the last line of code in this file to log 
* the number of odd numbers in the array. 
* 
* DIRECTIONS 
* 
* Implement 'makeCountingFunction()', so that it accepts a predicate function 
* as an argument. 'makeCountingFunction()' should return an anonymous function 
* that is able to: 
* 
* 1. iterate through an array and apply the predicate function to each item in 
*  that array, 
* 2. increment a counter based on the result of applying the predicate function 
*  to that item (i.e. does it match what we're looking for?) 
* 3. return the final count. 
* 
* The predicate function 'isOdd()' should accept an individual number as a 
* parameter and return whether or not that number is odd. 
* 
* BONUS 1: Can you write another predicate function that counts evens? 
* BONUS 2: Can you write a function that will return the sum of all numbers? 
* 
*/ 

function makeCountingFunction(predicate) {  //delcare the function with the parameter predicate 
    return function(list) {      // this returns a second function with the parameter list 
     var count = 0;        // a variable count is declared with the value of 0 
     list.forEach(function(item) {    //this states that for each item of the paramter the code needs to return a third function that has a parameter called item 
     if (predicate(item)) {     // this declares that if the parameter predicate.... has something to do with item???? this is where im lost 
     count++;        // the variable count increments by 1 
    } 
}) 
return count;       // returns the value of count. This gives up the number of odd integers. 
    }; 
} 

function isOdd(a) { 
    return (a % 2) !== 0 
} 

//  ============================================================================= 
// The code below should work without modification. 
//  ============================================================================= 

/** 
* The line below should package up 'makeCountingFunction()' and 'isOdd()' into 
* a single function that accepts an array of items as a parameter, iterates 
* through it and returns a count of how many of those items are odd numbers. 
* This new function is being assigned to the variable 'countTheOdds'. 
*/ 

var countTheOdds = makeCountingFunction(isOdd); 

/** 
* The final line below calls our new 'countTheOdds()' function and passes in an 
* array of numbers. Once your code is working, the line below should return the 
* number 4. 
*/ 

var oddCount = countTheOdds([1, 2, 3, 4, 5, 6, 7]); 
console.log('There are ' + oddCount + ' odd numbers.'); 
// expected output: There are 4 odd numbers. 
+0

'list.forEach(函數(項目){'你此行的分析是不正確你是在'list'的每一個人'item'調用該函數,而不是返回一個函數 –

+0

我認爲你需要一些解釋,所以哪一部分模糊? –

+0

我在控制檯中運行了你的代碼,它工作正常,問題是什麼? –

回答

-1

list.forEach(function(item) {您對此行的分析錯誤。您正在調用list的每個item函數,但不返回函數。在下面一行你說你丟失的行,請記住predicate函數,在這種情況下,如果謂詞函數爲listitem返回true,則遞增計數器。

看起來你的工作是編寫有問題的謂詞函數,它返回true表示奇數,false表示偶數,然後調用提供的函數,獲取返回的函數並用數字列表調用它來驗證它工作原理:。

makeCountingFunction(thePredicateYouWrite)([1,2,3,4,5]); // should be 3 
+0

這是我在facebook上收到的回覆,可能會有幫助。 http://imgur.com/a/8xZpF – dosebot