尝试先按数字排序数组,最后按字母排序

Tom*_*Tom 4 javascript arrays sorting

我正在尝试对数组进行排序。我正在尝试按“itemCommodity”排序。我只需要先按数字排序,然后再按字母排序。例如:

1000 A120 B330 2020 J954 5000

应显示为:

1000 2020 5000 A120 B330 J954

我希望有人能帮我解决这个问题。我有一个我在下面尝试的例子,但它没有按预期工作。

var product_data = [{
"itemCommodity": "1000",
},
{
"itemCommodity": "B330",
},
{
"itemCommodity": "A120",
},
{
"itemCommodity": "J954",
},
{
"itemCommodity": "5000",
},
{
"itemCommodity": "2020",
}]

 product_data.sort(function(a, b) {
     return a.itemCommodity - b.itemCommodity;
 });
Run Code Online (Sandbox Code Playgroud)

请注意 itemCommodity 不是数组中唯一的对象。我有大约 40 个不同的对象,只是试图对 itemCommodity 进行排序。

kin*_*ser 6

首先对不包含任何字母的元素进行排序。然后 - 比较他们的第一个字符对其余部分进行排序。

var product_data = [{a:"1000"},{a:"B330"},{a:"A120"},{a:"J954"},{a:"5000"},{a:"2020"}],
    x = product_data.sort(function(a, b) {
      return /[A-Za-z]/.test(a.a) - /[A-Za-z]/.test(b.a) || a.a.charCodeAt(0) - b.a.charCodeAt(0)
    });

    console.log(x);
Run Code Online (Sandbox Code Playgroud)

如果您同时有小写和大写字母,则必须将它们全部转换为一个互为大小写的字母,然后对它们进行排序:

var product_data = [{a:"1000"},{a:"B330"},{a:"a120"},{a:"J954"},{a:"5000"},{a:"2020"}],
    x = product_data.sort(function(a, b) {
      return /[A-Za-z]/.test(a.a) - /[A-Za-z]/.test(b.a) || (a.a.toUpperCase() < b.a.toUpperCase() ? -1 : a.a.toUpperCase() > b.a.toUpperCase() ? 1 : 0)
    });

    console.log(x);
Run Code Online (Sandbox Code Playgroud)

  • 起初我想 - _“有些人在遇到问题时,会想“我知道,我会使用正则表达式。”现在他们有两个问题。”_但在更抽象的情况下,字母不在前面这是要走的路。有一个 +1 (4认同)

tod*_*des 5

您可以尝试像这样比较它们

product_data.sort(function(a, b) {
     return a.itemCommodity > b.itemCommodity;
});
Run Code Online (Sandbox Code Playgroud)

如果你想对字母的顺序进行排序,那么你可以试试这个

 product_data.sort(function(a, b) {
     return a.itemCommodity.toLowerCase() > b.itemCommodity.toLowerCase();
});
Run Code Online (Sandbox Code Playgroud)