在Javascript中对字符串数组进行排序

时间:2014-09-15 22:35:58

标签: javascript arrays sorting

按字符串长度排序字符串数组时遇到了一些问题。所以,假设我有一个数组

arr = ["i","suck","at","programming","jk","sorta"]

在做了一些研究后,看起来正确的方法就是这样做

 arr.sort(function sorting(a, b){
          return b.length - a.length; 
          })

我很困惑这是如何处理的。任何人都可以告诉我如何完成按长度排序字符串数组的任务?这个函数似乎只是基于数组中每两个可能的元素对返回-1,0,1?请帮忙。

3 个答案:

答案 0 :(得分:0)

sort方法可以将函数作为参数
此函数通过返回值告诉sort方法x< y,x> y或x == y(x和y是排序方法向函数发送的两个变量)

  • 如果返回值为负(不一定是-1):则第一个参数必须在第二个
  • 之前
  • 如果返回值为0:排序
  • 的两个值相等
  • 如果返回值为正(不一定是1):那么第一个参数必须在第二个之后
  • 答案 1 :(得分:0)

    你必须记住,在javascript引擎的引擎下,sort只是一种排序算法。该算法可以是完成排序的任何算法。浏览器可能正在使用冒泡排序(一般来说是一种糟糕的排序算法),或者它可能是使用快速排序(更有可能)。事实上,如果你看一下类似的问题,你会发现浏览器将使用不同的排序算法,如快速排序或合并排序,具体取决于要排序的数组的数据类型(例如Javascript Array.sort implementation?)。任何排序算法的核心,从最基本到最复杂,是两个项目之间的比较。在算法的迭代中,如果项目a的排序低于或高于项目b(或相同),算法将决定?就是这样。算法变得相当复杂的唯一真正原因是优化排序效率。例如,平均而言,冒泡排序将需要按n^2次操作的顺序对n元素列表进行排序,而合并和快速排序则需要n*log(n)(更小,更小) n较大时的数字)对n元素列表进行排序。

    但是对于你关心的所有事情并不重要,你只需要按照你想要的方式对列表进行排序。在您的情况下,您要说的是,与长度较大的另一个字符串相比,您希望将较小长度的项目排序到结果列表中的较低位置。这就是您的比较功能所做的一切 - 它是算法知道如何订购商品的通用方式。我知道有关这些内容的文档,但我想给你我的看法。

    当您向Array.sort提供比较函数时,内部算法将知道在每次迭代(比较两个单独的项目)时,算法将在这两个给定项目上调用您的函数,并基于您的函数的两个特定元素的输出,它将相应地排序。

    答案 2 :(得分:-1)

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

      

    如果提供compareFunction,则对数组元素进行排序   根据比较函数的返回值。如果a和b是   比较两个要素,然后:

         

    如果compareFunction(a,b)小于0,则将a排序为低于的索引   b,即a先出现。

         

    如果compareFunction(a,b)返回0,则保持a和b不变   相互尊重,但相对于所有不同的排序   元素。注意:ECMAscript标准不保证这一点   行为,因而并非所有浏览器(例如Mozilla版本约会   至少回到2003年)尊重这一点。

         

    如果compareFunction(a,b)大于0,则将b排序为较低的索引   比一个。

         

    compareFunction(a,b)在给定a时必须始终返回相同的值   特定的元素对a和b作为它的两个参数。如果   返回不一致的结果然后排序顺序未定义