返回与原始数组相同的Javascript-.sort()

返回与原始数组相同的Javascript-.sort(),javascript,arrays,Javascript,Arrays,我正在尝试将我的topArr.sales从最大到最小排序 我正在使用.sort()方法来尝试并完成这项工作 目前,我的console.log返回值与原始数组相同,为了达到预期的结果,我一直在纠结我做错了什么 我的预期结果是按顺序返回topArr,从最大到最小。下面是我想要的结果的一个例子: let topArr = [ { sales: "494,927", store: "Online" }, { sales: "418,883", store: "Walk in" }, { sales:

我正在尝试将我的
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" },
]
以下是我的代码片段:

让topArr=[
{销售:“494927”,商店:“在线”},
{销售:“48883”,商店:“零售店”},
{销售:“418883”,商店:“走进”},
{销售:“28883”,商店:“预约”},
];
topArr.sort(函数(a,b){
返回a.销售-b.销售;
});

console.log(topArr)
您的销售是以字符串的形式进行的。在将其传递给排序的比较函数之前,需要先将其解析为整数

您可以尝试按以下方式进行操作-

让topArr=[{
销售:"494927",,
商店:“在线”
},
{
销售:“418883”,
商店:“走进”
},
{
销售:“48883”,
商店:“零售店”
},
{
销售:“28883”,
商店:“预约”
},
]
topArr.sort(函数(a,b){
var str1=a.sales;//将字符串a.sales放入字符串变量
var str2=b.销售额;
str1=str1.replace(//[^\d\.\-]/g,”);//删除逗号
str2=str1。替换(/[^\d\.\-]/g,”);
返回parseInt(str1)-parseInt(str2);//将修改后的字符串解析为float并进行比较。
});

控制台日志(topArr)您需要将比较器函数更改为使用数值而不是字符串

让topArr=[
{销售:“494927”,商店:“在线”},
{销售:“48883”,商店:“零售店”},
{销售:“418883”,商店:“走进”},
{销售:“28883”,商店:“预约”},
];
topArr.sort(函数(a,b){
返回parseInt(a.sales.replace(“/,/g“,”)-parseInt(b.sales.replace(“/,/g“,”));
});

console.log(topArr)
“494927”-“48883”
生成
NaN
,这不是一个有用的比较结果。您可以控制
销售值的格式吗?如果是这样,请更改为整数。如果sales string存储了一个大的整数值,如-
2786853
,则此操作无效。表达式-
a.sales.replace(“,”和“”)
将仅替换字符串中的第一个逗号。使用
a.sales.replace(“/,/g“,”)
代替。应该注意的是
str1.replace(/,/g)”)
假设数字是整数,并且我们所在的地区逗号并不表示小数点。对于一个更健壮的解决方案,您可能会考虑一个库,比如可以使用<代码> .NoMyPARServer()/Cux>方法。@ JByRD谢谢您提到它。我不知道逗号在其他地区用作十进制。如果使用的数据将逗号解释为小数位,那么用
代替
,用
parseFloat
代替
parseInt
就可以了,对吗?@Abhishek-如果你想让它在国际上(在多个地区)起作用,那么你会希望它是动态的(这样它就可以检测出你所在的区域,并根据该格式正确地进行编辑)。这就是像Globalize这样的库派上用场的地方。