4

文字列型の整数の配列があります。

var a = ['200','1','40','0','3'];

出力

>>> var a = ['200','1','40','0','3'];
console.log(a.sort());
["0", "1", "200", "3", "40"]

混合型配列も用意します。例えば

var c = ['200','1','40','apple','orange'];

出力

>>> var c = ['200','1','40','apple','orange']; console.log(c.sort());
["1", "200", "40", "apple", "orange"]

==================================================
文字列型の整数はソートされません。

4

5 に答える 5

18

他の人が言ったように、独自の比較関数を作成できます。

var arr = ["200", "1", "40", "cat", "apple"]
arr.sort(function(a,b) {
  if (isNaN(a) || isNaN(b)) {
    return a > b ? 1 : -1;
  }
  return a - b;
});

// ["1", "40", "200", "apple", "cat"]
于 2013-09-01T03:44:30.643 に答える
6

これはあなたが探しているものでなければなりません

var c = ['200','1','40','cba','abc'];
c.sort(function(a, b) {
  if (isNaN(a) || isNaN(b)) {
    if (a > b) return 1;
    else return -1;
  }
  return a - b;
});
// ["1", "40", "200", "abc", "cba"]
于 2013-09-01T03:33:01.820 に答える
1

独自のソート関数を作成する必要があります。

a.sort(function(a,b)) {
    var intValA = parseInt(a, 10);
    var intValB = parseInt(b, 10);

    if (!isNaN(parseInt(a, 10))) && !isNaN(parseInt(b, 10)) {
        // we have two integers
        if (intValA > intValB)
            return 1;
        else if (intValA < intValB)
            return 0;
        return 1;
    }
    if (!isNaN(parseInt(a, 10)) && isNaN(parseInt(b, 10)))
        return 1;
    if (isNaN(parseInt(a, 10)) && !isNaN(parseInt(b, 10)))
        return -1;

    // a and b are not integers
    if (a > b)
        return 1;
    if (a < b)
        return -1;
    return 0;
});
于 2013-09-01T03:35:58.083 に答える
0

私はjQueryをあまり知りませんが、皆さんの例から、私の要件に従って動作するコードを次のように要約しました

firebugで使用する

var data = ['10','2', 'apple', 'c' ,'1', '200', 'a'], temp;
temp = data.sort(function(a,b) {
         var an = +a;
         var bn = +b;
          
         if (!isNaN(an) && !isNaN(bn)) {
             return an - bn;
         } 
         return a<b ? -1 : a>b ? 1 : 0;
     }) ;
alert(temp);
于 2013-09-01T03:59:50.680 に答える
-1

私が知る限り、ほとんどの JavaScript 実装は、独自のカスタム ソートを提供するために渡すことができる関数を提供します。

Mozilla sort メソッド

于 2013-09-01T03:30:00.223 に答える