这是数组:
var price = new Array("600", "250", "750", "400", "200", "500", "350", "800", "200", "700", "800", "700", "1", "800", "500", "25", "0", "1,000,000");
我希望能够使用简单的排序对它们进行排序和打印。
人们在问,所以我想将它们转换为数字并从最高到最低排序。
答案 0 :(得分:2)
您需要编写比较器函数来比较数字
price.sort(function(a,b) {
return a-b;
});
这将以升序方式对数组进行排序(b-a
为降序)。请注意,这也将修改原始数组的顺序。
更改为a.replace(/,/g,"") - b.replace(/,/g,"")
以忽略数字比较中的逗号
<强>更新强>
如果您确定列表可以是数字或字符串的混合,则可能需要将上述内容更改为String(a).replace(/,/g,"") - String(b).replace(/,/g,"")
以避免语法错误。你如何处理非数字字符串取决于你现在正在制作NaN
,这对于排序比较来说不是一个有用的值。
答案 1 :(得分:2)
如果数字始终为整数,您可以执行以下操作:
price.sort(function(a, b) {
return parseInt(a.replace(/,/g,'') - parseInt(b.replace(/,/g,'')));
});
这将按原始数字的值按升序排序(最小的第一个)。您可以通过交换a
和b
答案 2 :(得分:1)
这里唯一真正棘手的部分是1,000,000
中的逗号。在尝试比较数字之前,您需要将它们剥离。
price.sort(function(x, y) {
return y.replace(/,/g,'') - x.replace(/,/g,'');
});
这将产生
["1,000,000", "800", "800", "800", "750",
"700", "700", "600", "500", "500", "400",
"350", "250", "200", "200", "25", "1", "0"]
或者可能先将元素转换为数字,然后对结果进行排序:
price = price.map(function(x) { return parseInt(x.replace(/,/g,''),10) })
.sort(function(x, y) { return y - x; });
这将产生
[1000000, 800, 800, 800, 750, 700, 700, 600,
500, 500, 400, 350, 250, 200, 200, 25, 1, 0]
注意:Array.prototype.map
是在ECMAScript 5中引入的,因此在某些旧版浏览器中不可用。如果这是一个问题,另一种方法是使用传统的for循环来转换数组。
答案 3 :(得分:0)
您可以使用常用的排序功能: http://www.w3schools.com/jsref/jsref_sort.asp
您还可以使用“parseInt”或“parseFloat”将字符串解析为数字。
答案 4 :(得分:-2)
在对阵列进行排序时发送自定义比较器。
price.sort(function(a, b) {
// write your custom comparison here
})