如何对字符串数组进行排序

时间:2013-12-13 16:52:44

标签: javascript html arrays html5 sorting

这是数组:

var price = new Array("600", "250", "750", "400", "200", "500", "350", "800", "200", "700", "800", "700", "1", "800", "500", "25", "0", "1,000,000");

我希望能够使用简单的排序对它们进行排序和打印。

人们在问,所以我想将它们转换为数字并从最高到最低排序。

5 个答案:

答案 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,'')));
});

这将按原始数字的值按升序排序(最小的第一个)。您可以通过交换ab

来撤销它

答案 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
})