根据每个元素的长度对数组进行sorting

我有一个这样的数组:

arr = [] arr[0] = "ab" arr[1] = "abcdefgh" arr[2] = "abcd" 

sorting后,输出数组应该是:

 arr[0] = "abcdefgh" arr[1] = "abcd" arr[2] = "ab" 

我的意思是,我想按照每个元素的长度的降序排列。

您可以使用Array.sort方法对数组进行sorting。 将string的长度作为sorting条件的sorting函数可以使用如下:

 arr.sort(function(a, b){ // ASC -> a.length - b.length // DESC -> b.length - a.length return b.length - a.length; }); 

注意:按string长度sorting["a", "b", "c"]不保证返回["a", "b", "c"] 。 根据规格 :

sorting不一定是稳定的(即比较相等的元素不一定保持原来的顺序)。

如果目标是按照字典顺序sorting,则必须指定其他条件:

 ["c", "a", "b"].sort(function(a, b) { return a.length - b.length || // sort by length, if equal then a.localeCompare(b); // sort by dictionary order }); 

这是sorting,根据你问的JavaScript的string的长度:

[通过冒泡sorting解决问题的方法] [1]

[1]: http : //jsfiddle.net/sssonline2/vcme3/2/ enter code here

基于萨尔曼的回答,我写了一个小函数来封装它:

 function sortArrayByLength(arr, ascYN) { arr.sort(function (a, b) { // sort array by length of text if (ascYN) return a.length - b.length; // ASC -> a - b else return b.length - a.length; // DESC -> b - a }); } 

然后用它来调用它

 sortArrayByLength( myArray, true ); 

请注意,不幸的是,函数可以/不应该添加到数组原型,如本页所述 。

另外,它修改了作为parameter passing的数组,并且不返回任何东西。 这将迫使数组的重复,并不会很大的数组。 如果有人有一个更好的主意,请做评论!

我修改了@ shareef的答案,使其简洁。 我用,

.sort(function(arg1, arg2) { return arg1.length - arg2.length })

 <script> arr = [] arr[0] = "ab" arr[1] = "abcdefgh" arr[2] = "sdfds" arr.sort(function(a,b){ return a.length<b.length }) document.write(arr) </script> 

你传递的匿名函数告诉它如何sorting给定的array.hope,这有助于。我知道这是令人困惑的,但你可以告诉sort函数如何通过传递一个函数作为参数来对数组元素进行sorting它该怎么做