2014-09-29 20 views
0

這繼續給我TypeError:undefined不是一個對象(評估'grades [2] .length')。幫幫我?需要兩個等級排列的JavaScript函數

此代碼的問題是:編寫一個名爲compare的JavaScript函數,該函數需要兩個等級數組,如果第一個學生的平均數較高則返回「first」,如果第二個學生的平均數較高則返回「second」平均。

function compare (grades) 
{ 
    var sum1 = 0; 
    var length1 = grades[1].length; 
    for (i=0; i<grades[1].length; i++) 
    { 
    sum1 += grades[1]; 
    var avg1 = sum1/length1; 
    } 

    var sum2 = 0; 
    var length2 = grades[2].length; 
    for (var i=0; i<grades[2].length; i++) 
    { 
    sum2 += grades[2]; 
    var avg2 = sum2/length2; 
    } 

    if (avg1 > avg2) 
    { 
    return "first"; 
    } 
    if (avg1 < avg2) 
    { 
    return "second"; 
    } 
} 
+3

你知道嗎,Javascript數組以元素0開頭,而不是元素1?你的循環似乎知道這一點,但成績[1],成績[2]建議不。 – Paul 2014-09-29 05:15:01

+2

如何調用compare()? – 2014-09-29 05:15:23

+0

這是一個介紹性的CS課程中的問題嗎?是以前的問題之一「calculateGPA」(字母等級)或類似的東西? – 2014-09-29 05:18:13

回答

1

試試這個:

var array1 = [1,2,3,4,5]; 
var array2 = [1,2,3,4,7]; 

function compare(arr1 , arr2) { 
    var aver1 = arr1.reduce(function(a, b) { return a + b; }, 0)/arr1.length; 
    var aver2 = arr2.reduce(function(a, b) { return a + b; }, 0)/arr2.length; 
    if(aver1 > aver2) { 
     alert('First'); 
    } else if (aver1 < aver2) { 
     alert('Second'); 
    } 
} 

compare(array1, array2); 

注:我假設你不使用IE < = 8

.reduce()是一個建在JavaScript數組功能。如果你點擊上面的鏈接到MDN上的文檔,你會看到他們給出了一個如何總結類似於上面的數組的總和的例子。

0

您可以將自己的函數添加到Array而不是重複自己。

Array.prototype.avg = function(){ 
    // Note: "this" is a special JS variable, contains the array "calling" .avg() 
    // So this.length is the length of the array, and this[0], this[1],... the data 
    for(var i=0,l=this.length, sum=0; i<l; ++i) sum+=this[i] 
    return sum/this.length 
} 

SallyPerfect = [100,100,100,100,95]; // She always gets good grades 
LittleBobbyTables = [60,70,60,70,314.159]; // He plays too many games, but reads xkcd 

alert("SallyPerfect avg is "+SallyPerfect.avg()); 
alert("LittleBobbyTables avg is "+LittleBobbyTables.avg()); 

var whoIsBetter = (SallyPerfect.avg()>LittleBobbyTables.avg())? "SallyPerfect": "LittleBobbyTables"; 
// you dont have to repeat yourself here, either, but it would require more code. 

alert(whoIsBetter+" had the best average grade"); 

DEMO:http://jsfiddle.net/bp9hvywe/

當然,如果這是一個家庭作業的問題,你應該做的,你被告知並使用一些這個代碼的(用適當的引用或屬性)來編寫一個函數,返回「第一」或「第二」。

+0

This這是我在本週末看到的介紹性CS課程作業中的完全相同的問題。所以我相信這也是OP的功課題,而且OP很可能不會理解'Array.prototype'是什麼。 – 2014-09-29 05:40:49

+0

我想我不同意教育學。除其他外,這教導打印出平均值。如果OP僅嘗試打印平均值,則會導致OP意識到他的代碼只計算其中一個平均值,而不是兩者。我懷疑他不在觀看演講,因此在這裏出現。也許他厭倦了演講,因爲學習這麼短的時間需要很長時間。我寧願他學習更多,然後學會貶低它交出來。如果OTOH他真的不在乎,那麼我正在寫給那些願意的人。 – Paul 2014-09-29 05:45:27

+0

我在講座中注意(@ Paul),但因病死我錯過了兩個。這就是爲什麼我需要幫助。 – 2014-09-29 06:06:40