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