2014-09-26 26 views
2

我需要创建一个返回数组中最小数字的函数,我似乎无法弄清楚这个问题,因为这里的其他问题根本没有帮助,因为他们给出了我以前从未见过的代码的答案,所以我有这个,但它总是只返回“0”而不是80,那么你能用我的代码来帮助我吗?返回数组中的最小数字,而不使用数学运算

var value = [100, 90, 100, 80]; 
 

 
function lowestGrade(a) { 
 
    for (var i = 0; i < a.length; i++) { 
 
    if (a[i] < a.length); 
 
    value = i; { 
 
     return (value); 
 
    } 
 
    } 
 
} 
 

 
document.write(lowestGrade(value));

+1

什么是在'if(...);'结尾处做的分号符号? – Soren 2014-09-26 01:46:58

+0

为什么你从未见过糟糕的代码?有一个内置的方法来做到这一点... – elclanrs 2014-09-26 01:48:08

+0

value.reduce(function(a,b){return a 2014-09-26 01:48:16

回答

1

如已经提到的,有建于的方式来处理这个问题。但是,我认为这是某种家庭作业问题。

var array = [90, 1, 77, -5, 101]; 
 

 
function lowest(arr) { 
 
    //Assume first is lowest 
 
    var low = arr[0]; 
 

 
    for (var i = 0; i < arr.length; i++) { 
 
    //If this isn't lower, swap 
 
    if (low > arr[i]) { 
 
     low = arr[i]; 
 
    } 
 
    } 
 

 
    //Will always contain lowest number 
 
    return low; 
 
} 
 

 
document.write(lowest(array));

+0

请使用'document.write()'而不是'console.log()'。否则,它只会将结果输出到开发者控制台中。 – Tarik 2014-09-26 01:52:51

+0

@Tarik - 修正。这听起来像是功能请求。我希望他们能够为了片段的目的而重写和拦截控制台日志记录。噢... – Josh 2014-09-26 01:54:33

+0

我同意。这也是我的第一印象和期望,但并未如我所料。 – Tarik 2014-09-26 01:56:33

1

的问题是在这里;

function lowestGrade(a) { 
    for (var i = 0; i < a.length; i++) { 
    if (a[i] < a.length); // < -- this is an if statement which has no effect 
    value = i; // <-- this just set the value to the loop index i 
    { 
     return (value); // << -- this returns at the first loop where i is zeo 
    } 
    } 
} 

取而代之,

var value = [100, 90, 100, 80]; 
 
function lowestGrade(a) { 
 
    var lowest = a[0]; 
 
    for (var i = 0; i < a.length; i++) { 
 
    if (a[i] < lowest) 
 
     lowest = a[i]; 
 
    } 
 
    return lowest; 
 
} 
 

 
document.write(lowestGrade(value));

0

试试这个:

var value = [100, 90, 100, 80]; 
lowestGrade(value); 

function lowestGrade (value) 
{ 
    var lowest; 
    for(var i = 0, cnt = value.length; i<cnt; i++){ 
     if(typeof lowest === 'undefined') { 
      lowest = value[i] 
     } else { 
      if(value[i] < lowest){ 
       lowest = value[i]; 
      } 
     } 
    } 

    console.log(lowest); 
} 

小提琴here

0

既然你是专门要求在Javascript中不使用数学对象,有一个答案我已经在这里找到在Stackoverflow中,以您想要的方式解决它:

function mymax(a) 
{ 
    var m = -Infinity, i = 0, n = a.length; 

    for (; i != n; ++i) { 
     if (a[i] > m) { 
      m = a[i]; 
     } 
    } 

    return m; 
} 

我并不拥有这个答案,所以请检查这个链接,查看原单笔者的回答:https://stackoverflow.com/a/13794386/44852

1
var value = [100, 90, 100, 80]; 

function lowestGrade(a) { 
var lowestNum = a[0]; // Set it to first element 
    for (var i = 1; i < a.length; i++) { //loop through array, starting at first element if length is greater than 1 
    if (a[i] < lowestNum) 
     lowestNum = a[i]; //if the array value is lower than your variable, set your variable to it 
    } 
    return lowestNum; 
} 

document.write(lowestGrade(value)); 
0

如果你不学习如何进行排序,您可以使用本机reduce功能。

var value = [100, 90, 100, 80]; 
var min = value.reduce(function (pv,cv) { 
    return pv > cv?cv:pv 
}); 
document.write(min); 
+0

@RobG更新了我的答案。 – Mritunjay 2014-09-26 01:58:36