2014-03-28 82 views
-1

我希望用戶輸入幾個標記,最後我想顯示最高的最低平均數有多少個「A」,「B」,「C 」, 「d」, 「F」JavaScript獲取數組的最大值最小值平均值

var highestMark=0; 
var gradeAwarded; 
var StudentArr= [Student]; 
var markArr = [mark]; 
var Student = prompt("Enter Student Name: ", "Name"); 
var mark = prompt("Enter Student Mark: ", 50); 
var max = Math.max.apply(markArr); /* This about equal to Math.max(numbers[0], ...) or Math.max(5, 6, ..) */ 
var min = Math.min.apply(markArr); 

if (mark < 0 || mark > 100) { 
    alert("Grate out of bounds"); 
} else if (mark >= 83) { 
    gradeAwarded = "A"; 
} else if (mark >= 70) { 
    gradeAwarded = "B"; 
} else if (mark >= 50) { 
    gradeAwarded = "C"; 
} else if (mark >= 0) { 
    gradeAwarded = "F"; 
} 
document.write(min); 
+2

以供將來參考,Java的!= JavaScript的 –

+0

http://jsfiddle.net/adeneo/Gqn6r/ – adeneo

+0

什麼是你的問題?你不喜歡你的代碼? – Phrogz

回答

0

Array.prototype.reduce允許你fold一個數組。

var min = markArr.reduce(
    function (a,b) { return Math.min(a, b); }, 
    Infinity); 
var max = markArr.reduce(
    function (a,b) { return Math.max(a, b); }, 
    -Infinity); 
var mean = markArr.reduce(function (a, b) { return a + b; }, 0) 
     /markArr.length; 

你有一些與你的代碼問題雖然。

var markArr = [mark]; 
var Student = prompt("Enter Student Name: ", "Name"); 
var mark = prompt("Enter Student Mark: ", 50); 

您使用mark閱讀mark之前初始化markArr

另外,mark被讀爲字符串。

您應該對您的語句重新排序,以便在使用它們之前對變量進行初始化,並且您應該確保mark以數字值結尾。

var mark = +prompt("Enter Student Mark: ", 50); 

提示之前的+脅迫通過prompt返回到數字的字符串。

+0

這意味着什麼? – HelloWorld

+2

請注意,雖然功能優雅,但通過三次遍歷數組計算最小/最大/平均值並不理想。此外,'Math.max.apply(ary)'比'ary.reduce(Math.max,-Infinity)更優雅和高效' – Phrogz

+1

@Progrog,我同意re效率,但我不同意重新理想。這是一個課堂練習,所以清晰度很重要,即使有「標記」,交互式程序中的效率也不會太高。長度「是世界上最大的本科班的規模。如果你想要非常高效,那麼在收到數據時要保持運行總數,以便在等待用戶輸入時充分利用空閒時間,而不是批量執行任何操作,並且避免函數調用開銷。 –

0

您可以對數組進行排序並取第一個和最後一個值。例如:

arr = [3, 5, 2, 14]; 
arr.sort(function(x, y){return x-y}); 
min = arr[0]; // 2 
max = arr[arr.length - 1]; // 14 

注意,因爲你想要的數值排序,而不是數字的字符串表示的詞彙分類自定義比較功能是必要的。 (否則,「14」會比「2」更小,這顯然不是您想要的方式。)

爲了記錄,我同意Mike Samuel在您的代碼的其他問題。

+0

排序以查找最小/最大是有趣的,但效率不高。現在,如果中位數也是需要的...... – Phrogz

相關問題