【问题标题】:Sorting one array as a parameter将一个数组作为参数排序
【发布时间】:2017-10-07 04:09:38
【问题描述】:

我一直在尝试并尝试不同的方式来跳出框框思考这个问题,但由于某种原因我无法理解。

         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 的循环值,然后比较它们按长度排序?

我能得到的任何线索或帮助将不胜感激。谢谢!

【问题讨论】:

  • 我在 Chrome Javascript 控制台中运行它,它运行得非常好。这不是一个无限循环。
  • 我在 codepen 中运行它,但它不起作用,因为它被认为是“无限循环”。它也不能作为我的挑战答案。

标签: javascript arrays string function sorting


【解决方案1】:

您实际上并不需要for-loopin 循环变量与排序函数使用的 in 参数不同,因此您可以有效地对数组 array.length 进行平方次排序。

只写:

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

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

【讨论】:

  • 谢谢。我不知道为什么我尝试了几百次它对我不起作用!可能是拼写错误或缺少分号之类的。
【解决方案2】:

为什么要对数组进行 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"]

【讨论】:

  • 更直接地回答您的问题:1) 这不是无限循环。也许它需要太长时间 2)内部 array.sort 函数中的 i 和 n 不是相同的变量,它们在循环中。在排序中,它们是数组元素。在 for 循环中,它们是简单的数字
  • 谢谢谢尔盖。我不知道为什么它不让我接受它,因为我认为我在没有循环的情况下放入了该代码。这些循环是通过尝试“跳出”框框来思考的,因为我的前几次尝试都行不通。再次感谢!
猜你喜欢
  • 2021-12-28
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 2011-08-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多