2017-02-04 19 views
1

私は何が間違っている私のコードでは、引数を比較する並べ替えを取得するすべての数字の正しい順序を返すのが不思議です。私はそれが私はどのようにシフトしていない数字12、4、94、および1ですが、私は完全な初心者であり、かなり混乱しています。前もって感謝します!Javascript配列の並べ替えの機能の奇妙な並べ替え

<!DOCTYPE html> 
<html> 
<head> 
    <title>Array Manipulation:Sort</title> 
    <script type="text/javascript"> 

     var parts = []; 

     parts.push("5", "42", "12"); 

     var removed = parts.pop(); 

     alert(removed); 


     function compare(value1, value2) { 
      if (value1 < value2) { 
       return -1; 
      } else if (value1 > value2) { 
       return 1; 
      } else { 
       return 0; 
      } 
     } 

     parts.unshift(12, 4, 94, 1); 

     alert(parts.sort());   //1, 12, 4, 42, 5, 94 
     alert(parts.sort(compare));  //1, 4, 12, 42, 5, 94 


    </script> 
</head> 
</html> 
+3

あなたは、文字列と数字を混合しているので、私の推測ではあります。 – Josh

+1

あなたの配列項目のいくつかは数字であり、そのうちのいくつかは文字列です。それはうまくいかない。あなたは数値か字句で比較しますか? – Bergi

+0

も参照してください[整数の配列を正しくソートする方法](http://stackoverflow.com/q/1063007/1048572) - あなたの質問は何か、多分重複しているのでしょうか? – Bergi

答えて

0

すべての値を数値として扱い、暗黙の型キャストをnumberに返すことをお勧めします。

function compare(value1, value2) { 
    return value1 - value2; 
} 

function compare(value1, value2) { 
 
    return value1 - value2; 
 
} 
 

 
var data = [12, 4, 94, 1, "5", "42"]; 
 

 
data.sort(compare); 
 

 
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+1

'-'を使って暗黙のうちにそれらをキャストすると言いたいかもしれません – Bergi

+0

Bergiの説明に感謝します。どの演算子も数値型として変数を暗黙的にキャストしますか? –

+0

オペランドが文字列であれば、基本的にすべての[算術演算子](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators)がnumberに変換されますが、plusに変換されません。結果も文字列です。 –

0

変更この

var parts = []; 
parts.push("5", "42", "12"); 

あなただけの数字との比較のために比較できるように

var parts = []; 
parts.push(5, 42, 12); 

へ:

function compare(value1, value2) { 
    return value1 - value2; 
} 
0

あなたは数に文字列を比較します、両方をnumbeに変換しますrs、異なる最初の文字を探し、それに基づいて動作します。

これを修正するには、文字列を数値に明示的に変換します。

function compare(value1, value2) { 
     value1 = +value1; 
     value2 = +value2; 
+0

javascriptは型セーフではないので、値を比較するときは注意が必要です。クエンティンの答えを見てください。 –

+1

@ el_buck0 OPに教えてください。質問しません –

+0

すみません。私は彼にもちろん言うつもりはありません –

関連する問題