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

时间:2012-05-17 06:17:09

标签: javascript arrays string sorting

我有一个这样的数组:

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

排序后,输出数组应为:

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

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

11 个答案:

答案 0 :(得分:189)

您可以使用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"]。根据{{​​3}}:

  

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

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

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

答案 1 :(得分:3)

这是排序,取决于你问的javascript字符串的长度:

[冒泡排序问题的解决方案] [1]

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

答案 2 :(得分:2)

我们可以使用 Array.sort 方法对该数组进行排序。

ES5解决方案

var array = ["ab", "abcdefgh", "abcd"];

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

console.log(JSON.stringify(array, null, '\t'));

  

对于升序排序:a.length - b.length

     

对于降序排序:b.length - a.length

ES6解决方案

注意:并非所有浏览器都能理解ES6代码!

在ES6中,我们可以使用 arrow function expressions

let array = ["ab", "abcdefgh", "abcd"];

array.sort((a, b) => b.length - a.length);

console.log(JSON.stringify(array, null, '\t'));

答案 3 :(得分:0)

根据Salman的回答,我写了一个小函数来封装它:

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 );

请注意,遗憾的是,函数可以/不应该添加到Array原型中,如this page所述。

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

#created a sorting function to sort by length of elements of list
def sort_len(a):
    num = len(a)
    d = {}
    i = 0
    while i<num:
        d[i] = len(a[i])
        i += 1
    b = list(d.values())
    b.sort()
    c = []
    for i in b:
        for j in range(num):
            if j in list(d.keys()):
                if d[j] == i:
                    c.append(a[j])
                    d.pop(j)
    return c

答案 6 :(得分:0)

如果要保留与原始数组相同长度的元素顺序,请使用冒泡排序。

Input = ["ab","cdc","abcd","de"];

Output  = ["ab","cd","cdc","abcd"]

功能:

function bubbleSort(strArray){
  const arrayLength = Object.keys(strArray).length;
    var swapp;
    var newLen = arrayLength-1;
    var sortedStrArrByLenght=strArray;
    do {
        swapp = false;
        for (var i=0; i < newLen; i++)
        {
            if (sortedStrArrByLenght[i].length > sortedStrArrByLenght[i+1].length)
            {
               var temp = sortedStrArrByLenght[i];
               sortedStrArrByLenght[i] = sortedStrArrByLenght[i+1];
               sortedStrArrByLenght[i+1] = temp;
               swapp = true;
            }
        }
        newLen--;
    } while (swap);
  return sortedStrArrByLenght;
}

答案 7 :(得分:0)

使用现代 JavaScript,您可以这样做:

降序

const arr = [
  "ab",
  "abcdefgh",
  "abcd",
  "abcdefghijklm"
];

arr.sort((a, b) => b.length - a.length);

console.log(JSON.stringify(arr, null, 2));

升序 - 只需将 ab

切换

const arr = [
  "ab",
  "abcdefgh",
  "abcd",
  "abcdefghijklm"
];

arr.sort((a, b) => a.length - b.length);

console.log(JSON.stringify(arr, null, 2));

答案 8 :(得分:-1)

此代码应能解决问题:

var array = ["ab", "abcdefgh", "abcd"];

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

console.log(JSON.stringify(array, null, '\t'));

答案 9 :(得分:-1)

let array = [`ab`, `abcdefgh`, `abcd`];
let newArray = array.sort((a,b) => {
    return b.length - a.length
})
console.log(newArray);

请输入以下代码

答案 10 :(得分:-2)

<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>

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