JavaScript中的Sort()数组按数字顺序排列

3
我有一个类似这样的数组
var Arr = [ 'h78em', 'w145px', 'w13px' ]

我想按数字顺序对这个数组进行排序。

[ 'w13px', 'h78em', 'w145px' ]

我使用这个函数来进行常规的数字排序

var sortArr = Arr.sort(function(a,b){
     return a-b;
});

由于数组中的字词,该函数无法正常工作。

是否可能对此数组进行排序?如何拆分/匹配数组?


"78em","145px":这些是不同的单位。为什么要这样排序?您希望独立于单位还是应进行em到像素的转换? - Denys Séguret
1个回答

8
您可以使用正则表达式在排序时删除所有字母:
var Arr = [ 'h78em', 'w145px', 'w13px' ]​;
var sortArr = Arr.sort(function(a, b) {
    a = a.replace(/[a-z]/g, "");  // or use .replace(/\D/g, "");
    b = b.replace(/[a-z]/g, "");  // to leave the digits only
    return a - b;
});

DEMO: http://jsfiddle.net/8RNKE/


1
我会添加 i,这样它不仅检查小写字母,使其更安全。 - sQVe
@sQVe 很好的发现。还有一种选项可以使用 /[\D]/g 仅保留数字。但是,这取决于输入。 - VisioN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接