【问题标题】:Sorting array by alphabet will not function correctly按字母排序数组将无法正常工作
【发布时间】:2016-06-14 13:55:58
【问题描述】:

我说的代码:https://jsfiddle.net/sbe8yzv0/8/

我想用两个按钮按名称对数组进行排序:第一个按钮按长度排序,第二个按钮按字母排序。

当我按字母排序时,它不想运行。它随机地将数据放在不同的位置。我尝试了多种排序方法,它们都表现得很时髦,并且没有完全按字母顺序排序。我该怎么做才能使它真正按字母对数组中的名称进行排序?

    function sortNameAlphabetically(a, b) {
        return a.name > b.name;
    }

按长度排序按预期工作,除非它在长度后按字母顺序排序时,它会向后排序。我如何确保它以正确的方式排序?

    function sortNameByLength(a, b) {
        return b.name.length - a.name.length;
        a.localeCompare(b); 

【问题讨论】:

标签: javascript arrays sorting alphabetical


【解决方案1】:

sortNameAlphabetically 方法更改为

  function sortNameAlphabetically(a, b) {
        return a.name.localeCompare( b.name );
    }

更新fiddle

另外,sortNameByLength 方法中的 return 语句之后的语句不可访问,并且无论如何都不需要。

    function sortNameByLength(a, b) {
        return b.name.length - a.name.length;
    }

【讨论】:

  • 太棒了。你知道我该如何解决第二个问题吗?
  • @Thomasdc 就是 return a.name.length - b.name.length;
  • 但是如何让它在按长度排序后按字母顺序排序呢?因此,如果我有 ABA、BBBB、AAAA、AAA。应该是 AAAA、BBBB、AAA、ABA
【解决方案2】:

问题的第二部分,要在长度排序后保持字母排序,您可以使用 localeCompare 方法的逻辑 OR。

function sortNameByLength(a, b) {
    return b.name.length - a.name.length || a.name.localeCompare(b.name);
}

【讨论】:

  • 我已经尝试过了,但它不起作用。没发生什么事。 jsfiddle.net/sbe8yzv0/10
  • 请尝试编辑。您需要处理 name 属性。
  • 非常好。非常感谢! :)
猜你喜欢
  • 2014-05-14
  • 2018-12-02
  • 2017-06-24
  • 1970-01-01
  • 2013-12-14
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多