使用字符串和数字对Javascript数组进行排序

时间:2014-10-08 20:27:43

标签: javascript arrays

我在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") ?

这是正确的还是我该怎么做?非常感谢提前。

3 个答案:

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