if else for for循环数组javascript

时间:2015-09-22 01:00:40

标签: javascript arrays loops if-statement

我确定这很简单,但有人可以告诉我为什么我的代码会在这个for循环中运行if语句吗?我试图解决这个问题,并希望能够提醒我出错的地方而不是答案。我试图找到num适合排序数组的适当元素索引,所以在这种情况下函数应该返回3.

function where(arr, num) {
    // Find my place in this sorted array.
    arr.sort();
    for (var i = 0; i > arr.length; i++) {
       if(arr[i]<num){
         return arr[i]
       }
    }
}

where([10, 20, 30, 40, 50], 35);

8 个答案:

答案 0 :(得分:3)

问题不在于if语句,而是你的for循环。你将它定义为:

 for (var i = 0; i > arr.length; i++)

仅在i大于数组长度时才运行,这是永远的。

交换您的比较,你就是金色。

答案 1 :(得分:2)

返回索引而不是值

return i

return arr[i]将返回索引处的值,如aka 40而不是3

还将for循环中的逻辑更改为&lt;不是&gt;因为我永远不会超过数组长度

所有这些将是

for (var i = 0; i < arr.length; i++) {
    if(arr[i]<num){
        return i
    }
}

答案 2 :(得分:1)

请参阅此小提琴,了解您的解决方案Fiddle

function where(arr, num) {
// Find my place in this sorted array.
    arr.sort();
    //changed for loop
    for (var i = 0; i < arr.length; i++) {
    //changed comparison
        if(arr[i]>num){
           return i}
        }
   }
  alert(where([10, 20, 30, 40, 50], 35));

答案 3 :(得分:0)

当您找到合适的位置时,您将返回当前位于该位置的值而不是索引本身。仅使用return arr[i]替换return i

答案 4 :(得分:0)

您在i > arr.length循环条件中测试了for。鉴于i0开始,它不会比任何数组都大,所以循环永远不会运行。

答案 5 :(得分:0)

应该更像是:

function where(arr, num){
  var a = arr.slice();
  a.push(num); a.sort(function(a,b){return a-b;});
  if(a.indexOf){
    return a.indexOf(num);
  }
  else{
    for(var i=0,l=a.length; i<l; i++){
      if(a[i] === num){
        return i;
      }
    }
  }
  return false;
}
console.log(where([10, 20, 30, 40, 50], 35));

答案 6 :(得分:0)

你必须从最后一个循环到第一个,下面的代码将返回2是30的索引

function where(arr, num) {
    // Find my place in this sorted array.
    arr.sort();
    for (var i = arr.length - 1; i >= 0; i--) {
       if(arr[i]<num){
         return i
       }
    }
}

where([10, 20, 30, 40, 50], 35); 

答案 7 :(得分:0)

下面!! 我做了一些改动,它起作用了!:

<!DOCTYPE html>
<html>
<body>
    <script>
        function where(arr, num){
        // Find my place in this sorted array.
        arr.sort();
        for(var i = 0; i < arr.length; i++){ // Here was another error, the condition was wrong: "i" must be lower than arr.length.
           if(num < arr[i]){ // I change this, because you wanna analyze if the number you pass to the function is lower than the element of the array (It was backwards in the original code)
             return 'The position is ' + [i]; //Shows the position the number should be. In this case, 3 like you say before :).
             break
        }
    }
}

console.log(where([10, 20, 30, 40, 50], 35));

    </script>
</body>
</html>

希望它对你有所帮助。