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)

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

您可以尝试执行以下操作 -

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, "");

您需要将比较器函数更改为使用数值而不是字符串。

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 parseInt(a.sales.replace("/,/g","")) - parseInt(b.sales.replace("/,/g",""));
});

console.log(topArr)

最新更新