2016-05-10 14 views
1

私は以下のような目録を持っています。数値と文字列を含む2次元配列の並べ替え

var arr1 = [ 
    [21, "Bowling Ball"], 
    [2, "Dirty Sock"], 
    [1, "Hair Pin"], 
    [5, "Microphone"] 
]; 

在庫をアルファベット順に並べ替える必要があります。私は単純なバブルソート技術を使ってそれをやってみました。しかし、 "wrappedCompareFnは関数ではありません"というエラーが表示されます。

function sort(arr1){  
//console.log("works"); 
for(var i=0;i<arr1.length;i++){  
    for(var j=0;j<arr1.length;j++){  
    // console.log(arr1[j][1].localeCompare(arr1[i][1])); 
    if(arr1[j][1].localeCompare(arr1[i][1])<0){   
     var tmp=arr1[i][1]; 
     arr1[i][1]=arr1[j][1]; 
     arr1[j][1]=tmp;   
     }   
    }  
    }   
return arr1; 
} 

私のコードに問題はありますか?また、さまざまな種類のオブジェクトを持つ多次元配列をソートするための良い方法がありますか?

+1

これは、バブルソートではありません。内部ループの初期値は、 'for(var j = i + 1; ...' – AhmadWabbi

+0

可能な代替:http://stackoverflow.com/questions/4907683/sort-a-two-dimensional-array- 1列目で –

+0

あなたは明確ではない、最初の列または2番目に並べ替える。 – viveksinghggits

答えて

1

カスタムコールバックを使用してArray#sortメソッドをビルドすることができます。

sort()メソッドは、配列の要素を所定の位置にソートして返します。並べ替えは必ずしもstableではありません。デフォルトのソート順は、文字列のUnicodeコードポイントに従います。

var arr1 = [[1, "Hair Pin"], [21, "Bowling Ball"], [2, "Dirty Sock"], [5, "Microphone"]]; 
 

 
arr1.sort(function (a, b) { 
 
    return a[1].localeCompare(b[1]); 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(arr1, 0, 4) + '</pre>');

+0

ちょっと疑問...ここでaとbとは何ですか?それは配列の2つの要素ですか? ? – leoOrion

+1

aとbは外部配列の要素です。たとえば、 '[21、" Bowling Ball "]'と '[2、" Dirty Sock "]'を比較すると、結果として2番目の要素にアクセスする必要がありますインデックスを持つ内部配列の –

関連する問題