我正在尝试将我的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)