【问题标题】:Javascript array sort for regular strings and strings of numbersJavascript数组排序常规字符串和数字字符串
【发布时间】:2020-04-15 04:23:30
【问题描述】:

我有一个数组,它可能只是一个字符串列表,也可能只是一个数字字符串列表,即数组可能如下所示

let array = ['abc','def','aef','gfh']
             or
let array = ['123','456','192','412']

我希望有一个排序函数可以在这两种情况下处理自然排序,下面的代码似乎不能处理数字字符串,有没有办法处理这个问题?

    array.sort((a,b) => {
        if(a > b) return 1;
        if(a < b) return -1;
        return 0;
    });

【问题讨论】:

标签: javascript arrays sorting


【解决方案1】:

您可以使用String#localeCompare() 方法执行此操作,例如:

let array = ['abc', 'def', 'aef', 'gfh']
array.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));
console.log(array)

array = ['123', '456', '192', '412', '5']
array.sort((a, b) => a.localeCompare(b, undefined, { numeric: true }));
console.log(array)
.as-console-wrapper { max-height: 100% !important; top: 0; }

正如docs 中提到的,对于数字排序,我们只需要使用{numeric: true} 选项。

// by default, "2" > "10"
console.log(["2", "10"].sort((a,b) => a.localeCompare(b))); // ["10", "2"]

// numeric using options:
console.log(["2", "10"].sort((a,b) => a.localeCompare(b, undefined, {numeric: true})));
// ["2", "10"]

【讨论】:

  • 感谢您的回答。这就是我需要的。 :)
【解决方案2】:

您可以在sort函数中检查array中的元素是数字还是字符串。

isNaN(string) 检查会告诉您它是否不是数字:

function sortNumOrStr(array) {
  return array.sort((a, b) => isNaN(a) ? a.localeCompare(b) : +a - b);
}

let array = ['abc', 'def', 'aef', 'gfh']
console.log(sortNumOrStr(array));
array =  ['123', '456', '-90', '192', '412'];
console.log(sortNumOrStr(array));

【讨论】:

  • 感谢您的回答。这就是我需要的。 :)
猜你喜欢
  • 2021-08-08
  • 1970-01-01
  • 1970-01-01
  • 2015-11-11
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
相关资源
最近更新 更多