117

我有一个这样的数组:

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

排序后,输出数组应为:

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

我想按descending每个元素的长度顺序。

4

12 回答 12

283

您可以使用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
});
于 2012-05-17T06:24:48.797 回答
9

我们可以使用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 中我们可以使用箭头函数表达式

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

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

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

于 2018-07-04T19:35:56.703 回答
3

这是排序,具体取决于您询问的带有 javascript 的字符串的长度:

[用冒泡排序解决问题][1]

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

于 2012-05-17T06:29:02.420 回答
1
#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
于 2020-04-23T17:07:55.927 回答
1

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

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;
}
于 2020-10-06T05:07:35.543 回答
1

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

降序

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

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

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

升序a-只需切换b

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

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

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

于 2021-08-04T20:00:16.777 回答
0

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

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

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

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

于 2015-09-24T14:55:45.983 回答
0

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

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

于 2016-08-25T22:27:03.090 回答
0

这段代码应该可以解决问题:

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

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

console.log(JSON.stringify(array, null, '\t'));
于 2020-03-16T15:03:10.280 回答
0
let array = [`ab`, `abcdefgh`, `abcd`];
let newArray = array.sort((a,b) => {
    return b.length - a.length
})
console.log(newArray);

请输入以下代码

于 2021-06-04T12:02:37.850 回答
0
let arr  = [5,2,100,1,20,3];
arr.sort((a,b)=>{
  return a-b 
})

console.log(arr) //[1, 2, 3, 5, 20, 100]

在返回值上,sort 方法将执行交换元素的功能

return < 0  { i.e -ve number then  a comes before b}
return > 0  { i.e +ve number then  b comes before a}
return == 0 { order of a and b remains same }
于 2021-11-22T06:20:47.253 回答
-3
<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 的匿名函数告诉它如何对给定数组进行排序。希望这会有所帮助。我知道这很令人困惑,但是您可以通过将函数作为参数传递给 sort 函数来告诉它如何对数组的元素进行排序它该怎么做

于 2012-05-17T06:44:37.400 回答