2017-10-07 84 views
0

我一直在尝试和尝试不同的方式来思考这个盒子外面,出于某种原因我无法得到它。排序一个数组作为参数

  function sortByLength(array) { 
 
      for(var i = 0; i < array.length; i++) { 
 
      for(var n = 0; n < array.length; n++) { 
 
       array.sort(function(i, n) { 
 
       return i.length - n.length; 
 
       }); 
 
      } 
 
      } 
 
      return array; 
 
     } 
 
      
 
     console.log(sortByLength(["Hello", "Cheese", "Bye"])); 
 
      
 
     //expecting ["Bye", "Hello", "Cheese"]

我想我想弄清楚:
1.为什么这是一个无限循环?
2.为什么我不能简单地传递i和n的循环值,然后比较它们以便按长度对它们进行排序?

任何线索或帮助,我可以得到将不胜感激。谢谢!

+0

我跑了它在Chrome的JavaScript控制台,它完美的罚款。这不是一个无限循环。 – hexicle

+0

我在codepen中运行它,它不会工作,因为它被认为是一个“无限循环”。它也不会作为我的挑战答案。 –

回答

0

你为什么要尝试排序数组n^2次?这足以排序只是一次致电:

sortByLength = function (array){ 
array.sort(function(i, n){return i.length - n.length;}); 
return array; 
} 
sortByLength(["Hello", "Cheese", "Bye"]); 

(3) ["Bye", "Hello", "Cheese"] 
+0

和更直接的回答你的问题: 1)它不是一个无限循环。可能需要很长的时间 2)内部array.sort函数中的i和n不是相同的变量,它们在循环中。在排序他们是数组元素。在for循环中,它们是简单的数字 –

+0

谢谢谢尔盖。我不知道为什么它不会让我接受它,因为我认为我把代码放在没有循环的地方。这些循环是通过试图在盒子外“思考”出来的,因为我的第一次尝试不会奏效。再次感谢! –

1

你实际上并不需要for-loop的。循环变量的in与排序功能使用的参数in不同,因此您正在有效地对数组array.length进行排序的平方时间。

只要写:

function sortByLength(array){ 
 
    array.sort(function(i, n){ 
 
     return i.length - n.length; 
 
     }); 
 
    return array; 
 
} 
 

 
console.log(sortByLength(["Hello", "Cheese", "Bye"]));

+0

谢谢。我不知道为什么它没有为我尝试几百次我尝试过!本来可能是拼写错误或丢失的分号或某物。 –