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

我有一个这样的数组:

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

排序后,输出数组应该是:

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

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


您可以使用Array.sort方法对数组进行排序。 将字符串长度作为排序标准的排序函数可以按如下方式使用:

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

注意:按字符串长度排序["a", "b", "c"]不保证返回["a", "b", "c"] 。 根据规格:

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

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

["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
});

这是根据你问的JavaScript字符串的长度来排序:

[通过冒泡排序解决问题的方法] [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 );

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

此外,它修改了作为参数传递的数组,并且不返回任何内容。 这会强制重复数组,对于大型数组来说不会太好。 如果有人有更好的主意,请发表评论!

链接地址: http://www.djcxy.com/p/19041.html

上一篇: Sort an array based on the length of each element

下一篇: The best way to remove array element by value