按字符串长度排序字符串数组时遇到了一些问题。所以,假设我有一个数组
arr = ["i","suck","at","programming","jk","sorta"]
在做了一些研究后,看起来正确的方法就是这样做
arr.sort(function sorting(a, b){
return b.length - a.length;
})
我很困惑这是如何处理的。任何人都可以告诉我如何完成按长度排序字符串数组的任务?这个函数似乎只是基于数组中每两个可能的元素对返回-1,0,1?请帮忙。
答案 0 :(得分:0)
sort方法可以将函数作为参数
此函数通过返回值告诉sort方法x< y,x> y或x == y(x和y是排序方法向函数发送的两个变量)
答案 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作为它的两个参数。如果 返回不一致的结果然后排序顺序未定义