Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中对数组排序:_Javascript_Arrays - Fatal编程技术网

在javascript中对数组排序:

在javascript中对数组排序:,javascript,arrays,Javascript,Arrays,可能重复: 我试图对一个数组进行排序,该数组包含xxx1、xxx2、xxx3形式的元素。sort()方法在xxx9之前工作正常,如果有名为xxx10或xxx11的元素,则会失败。顺序为xxx1、xxx10、xxx11、xxx2等。请告诉我如何修复此问题。您将看到自然字符串排序的结果。如果字符串排序不是您想要的,您应该使用自己的比较器 做一些类似于: arrayToBeSorted.sort(function(first,second) { /* some code that compar

可能重复:


我试图对一个数组进行排序,该数组包含xxx1、xxx2、xxx3形式的元素。sort()方法在xxx9之前工作正常,如果有名为xxx10或xxx11的元素,则会失败。顺序为xxx1、xxx10、xxx11、xxx2等。请告诉我如何修复此问题。

您将看到自然字符串排序的结果。如果字符串排序不是您想要的,您应该使用自己的比较器

做一些类似于:

arrayToBeSorted.sort(function(first,second)
{ 
  /* some code that compares 'first' with 'second' and returns <0, ==0, >0*/ 
});
arrayToBeSorted.sort(函数(第一、第二)
{ 
/*比较“first”和“second”并返回0*/
});
看看关于如何实现自然排序的帖子

Array.prototype.alphanumSort = function(caseInsensitive) {
  for (var z = 0, t; t = this[z]; z++) {
    this[z] = [];
    var x = 0, y = -1, n = 0, i, j;

    while (i = (j = t.charAt(x++)).charCodeAt(0)) {
      var m = (i == 46 || (i >=48 && i <= 57));
      if (m !== n) {
        this[z][++y] = "";
        n = m;
      }
      this[z][y] += j;
    }
  }

  this.sort(function(a, b) {
    for (var x = 0, aa, bb; (aa = a[x]) && (bb = b[x]); x++) {
      if (caseInsensitive) {
        aa = aa.toLowerCase();
        bb = bb.toLowerCase();
      }
      if (aa !== bb) {
        var c = Number(aa), d = Number(bb);
        if (c == aa && d == bb) {
          return c - d;
        } else return (aa > bb) ? 1 : -1;
      }
    }
    return a.length - b.length;
  });

  for (var z = 0; z < this.length; z++)
    this[z] = this[z].join("");
}
Array.prototype.alphanumSort=函数(不区分大小写){
for(var z=0,t;t=this[z];z++){
这个[z]=[];
变量x=0,y=-1,n=0,i,j;
而(i=(j=t.charAt(x++).charCodeAt(0)){
变量m=(i==46 | |(i>=48&&i-bb)?1:-1;
}
}
返回a.length-b.length;
});
对于(var z=0;z
目前,您的数组正在按字母顺序排序,这就是您获得这些结果的原因。您需要提供自己的比较器函数来实现数字排序

试一试


您可以在回调中实现自定义排序条件,以传递到
Array.sort()


这是预期的行为。寻找一个自然排序实现。发布一些代码。我想你需要转换你的号码。嗨……这个很好用。谢谢。
var arr = ["xxx1","xxx10","xxx2","xxx20","xxx3","xxx30"];

var sortedArr = arr.sort( function( a, b ) {

    // remove first 3 characters so remaining string will parse
    a = parseInt( a.substr( 3 ) );
    b = parseInt( b.substr( 3 ) );

    return a - b;
});

console.log( sortedArr ); // => ["xxx1", "xxx2", "xxx3", "xxx10", "xxx20", "xxx30"]
​var arr = [],
    re = /^\D*(\d+)$/;

for(var i = 20; i-- > 0;) {
    arr.push('xxx' + i);
}

function comparator(a, b) {
    var numA = a.match(re)[1],
        numB = b.match(re)[1];
    return numA - numB;
}

arr.sort(comparator);
console.log(arr);
​