2015-08-25 58 views
0

我試圖創建一個函數(稱爲差異),它會發現數字數組的總和之間的差異,以及(最大值*數組中的項數)。我試過以下,但它不斷返回undefined!任何幫助?的Javascript循環的代碼返回「未定義」

function difference(randomArray){ 

    var origSum = function() { 
    var sum = 0; 
    for (var i = 0; i < randomArray.length; i++) { 
     sum += randomArray[i] 
    }; 
    return sum; 
    }; 

    var maxi = function() { 
    var max = 0 
    for (var x = 0; x < randomArray.length; x++) { 
     if (randomArray[x] > max) { 
     max = randomArray[x] 
     }; 
    }; 
    return max; 
    }; 

    var sum = function() { 
    return ((maxi * randomArray.length) - origSum) 
    }; 

    if (randomArray.length <= 1) { 
    return (1 - 2) 
    } 
    else { 
    return sum 
    }; 
}; 
+0

對於數組的最大參見[如何使用Math.max.apply](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/ max) – Paul

回答

0

在你sum功能,您試圖通過另一個函數乘以一個函數,你必須實際調用的函數,以及在你的腳本的末尾調用sum功能:

var sum = function() { 
    return ((maxi() * randomArray.length) - origSum()) 
}; 

而且:

return sum(); 
0

maxi,origSum和sum是函數。你需要像那樣稱呼他們,包括括號。

function difference(randomArray){ 

    var origSum = function() { 
    var sum = 0; 
    for (var i = 0; i < randomArray.length; i++) { 
     sum += randomArray[i] 
    }; 
    return sum; 
    }; 

    var maxi = function() { 
    var max = 0; // What if all array values are negative? 
    for (var x = 0; x < randomArray.length; x++) { 
     if (randomArray[x] > max) { 
     max = randomArray[x] 
     }; 
    }; 
    return max; 
    }; 

    var sum = function() { 
    return ((maxi() * randomArray.length) - origSum()) // < here 
    }; 

    if (randomArray.length <= 1) { 
    return (1 - 2) // This is weird ? 
    } 
    else { 
    return sum(); // < and here 
    }; 
}; 

還有一些缺點。如果數組中的所有值都是負數,maxi將返回0而不是最大值。而在年底,return (1 - 2)總是返回-1,而你可能想返回唯一陣列值,如果數組包含1項。

+0

非常感謝!由於每個精緻的細節,我工作的編碼實踐網站,他們給你模糊的任務之一,所以我知道的一些代碼是有點怪異,但他們有一些奇怪的要求。 – Adoni