我在Javascript中有一个数组中的元素列表,如下所示:
myArray = ["Datastore one - free space 34.23GB", "Datastore two - free space 56.23GB",...]
等等。我想在freespace上对数组进行排序,所以在上面的例子中,Datastore有两个是数组中的第一个元素。该数组始终使用“ - free space xx.xxGB”构建,但在某些情况下可用空间可能为5位,例如xxx.xxGB。
有人可以提供一种排序阵列的方法吗?我看到我可以使用像
这样的东西"*- free space\s[1-9][0-9]*GB"
这就像
myArray.sort("*- free space\s[1-9][0-9]*GB") ?
这是正确的还是我该怎么做?非常感谢提前。
答案 0 :(得分:2)
在自定义排序功能中拉出数字部分,然后减去:
myArray = ["Datastore one - free space 34.23GB", "Datastore two - free space 56.23GB", "Datastore three - free space 6.23GB" ];
var re = /([0-9\.]+)GB/; // regex to retrieve the GB values
myArray = myArray.sort(
function(a, b) {
var ma = a.match(re); // grab GB value from each string
var mb = b.match(re); // the result is an array, with the number at pos [1]
return (ma[1] - mb[1]);
}
);
alert(myArray.join("\r\n"));

答案 1 :(得分:1)
这应该可以解决问题:
myArray.sort(function compare(a, b) {
var size1 = parseFloat(a.replace(/[^0-9\.]/g, ''));
var size2 = parseFloat(b.replace(/[^0-9\.]/g, ''));
if (size1 < size2) {
return -1;
} else if (size1 > size2) {
return 1;
}
return 0;
});
Array.prototype.sort
不接受正则表达式,它会接受回调,或者如果您没有通过回调,则会根据数字/字母顺序对数组进行排序
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
答案 2 :(得分:1)
如果您只想要返回的数字,这也应该有用。
我用空格分割字符串并抓住最后一节。 (#GB),然后我抓住了除最后两个字符之外的所有内容的子字符串(所以我砍掉了GB),然后使用Javascript函数对剩余的数字进行排序。
<强> JSFiddle Demo 强>
window.onload = function() {
myArray = ["Datastore one - free space 34.23GB", "Datastore two - free space 56.23GB", "Datastore two - free space 16.23GB", "Datastore two - free space 6.23GB"];
for (i = 0; i < myArray.length; i++)
{
var output = myArray[i].split(" ").pop();
output = output.substring(0, output.length-2);
myArray[i] = output;
}
myArray.sort(function(a, b){return a-b});
alert(myArray);
};