首页 > 解决方案 > Javascript - .sort() 返回与原始数组相同

问题描述

我正在尝试topArr.sales从最大到最小对我的排序。

我正在使用该.sort()方法来尝试完成此操作。

目前我的console.log返回值与原始数组相同,为了实现我想要的结果,我被困在我做错的事情上。

我的预期结果是topArr按顺序返回,从最大到最小。这是我想要的结果的示例:

let topArr = [ 
{ sales: "494,927", store: "Online" },
{ sales: "418,883", store: "Walk in" },
{ sales: "48,883", store: "Retail Stores" },
{ sales: "28,883", store: "Appointments" },
]

这是我的代码片段:

let topArr = [
            { sales: "494,927", store: "Online" },
            { sales: "48,883",  store: "Retail Stores" },
            { sales: "418,883", store: "Walk in" },
            { sales: "28,883",  store: "Appointments" },
        ];
        
        
       topArr.sort(function (a, b) {
        return a.sales - b.sales;
    });
    
    console.log(topArr)

标签: javascriptarrays

解决方案


您的销售额是字符串的形式。您需要先将其解析为整数,然后才能将其传递给排序的比较函数。

您可以尝试如下操作 -

let topArr = [{
    sales: "494,927",
    store: "Online"
  },
  {
    sales: "418,883",
    store: "Walk in"
  },
  {
    sales: "48,883",
    store: "Retail Stores"
  },
  {
    sales: "28,883",
    store: "Appointments"
  },
]

topArr.sort(function(a, b) {
  var str1 = a.sales; //Taking the string a.sales into a string variable
  var str2 = b.sales;
  str1 = str1.replace(/[^\d\.\-]/g, ""); //removing the commas
  str2 = str1.replace(/[^\d\.\-]/g, "");
  return parseInt(str1) - parseInt(str2); //parsing the modified string into float and comparing them.
});

console.log(topArr);

还有一点需要注意的是,我假设销售商店只有整数值。如果某些销售商店也浮动,请使用 -parseFloat(str1) > parseFloat(str2)获得正确的输出。

*注意- 如果上述替换语句不起作用,您也可以尝试 -

 str1.replace(/,/g, "");

推荐阅读