根据每个元素的长度对数组进行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它该怎么做