【问题标题】:How can I sort an array alphabetticaly and by length如何按字母顺序和长度对数组进行排序
【发布时间】:2020-10-20 11:26:33
【问题描述】:

假设我有这个数组:['a', 'c', 'bb', 'aaa', 'bbb', 'aa']。 我想这样排序:

aaa, aa, a, bbb, bb, c.

this.array= this.array.sort((n1, n2) => n1.localeCompare(n2));
this.array= this.array.sort((n1, n2) => n2.length - n1.length);

但这是不对的。我该如何解决?

【问题讨论】:

  • 第一次排序后,再按长度排序? .sort((a,b) => b.length - a.length); :)
  • @HalilÇakar 只会按每个字符串的长度对数组进行排序。
  • sort 改变数组。因此,无需重新分配:this.array = this.array.sort(...)
  • @adiga 是的,我真的没想到

标签: javascript arrays typescript sorting


【解决方案1】:

您可以检查一个字符串是否以另一个字符串开头,并将长度的增量作为返回值。

var array = ['a', 'c', 'bb', 'aaa', 'bbb', 'aa'];

array.sort((a, b) => {
    let d = a.startsWith(b) || b.startsWith(a)
            ? b.length - a.length
            : 0;

    return d || a.localeCompare(b);
});

console.log(array);

没有String#startsWith

var array = ['a', 'c', 'bb', 'aaa', 'bbb', 'aa'];

array.sort((a, b) => {
    let min = Math.min(a.length, b.length),
        d = a.slice(0, min) === b.slice(0, min)
            ? b.length - a.length
            : 0;

    return d || a.localeCompare(b);
});

console.log(array);

【讨论】:

  • 我不知道默认情况下我的数组中是否有字符“a”或“b”。这只是一个例子..它是一个动态数组
  • 试试动态内容吧。
  • 奇怪..它说我 a.startsWith 不是一个函数。我也明确 a:string, b:string
  • @travis_91 你可以使用方括号符号arr.sort((a, b) => a[0] == b[0] ? b.length - a.length : a.localeCompare(b))
  • 您可以将polyfill 换成String#startsWith
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 2018-11-02
  • 1970-01-01
  • 2021-12-19
  • 2021-04-05
  • 1970-01-01
相关资源
最近更新 更多