2017-03-22 88 views
0

所以我有這個數組,我需要按字母順序排列第二項(newInv[x][1])。我試圖製作一個compareFunction,但沒有奏效。幫幫我!謝謝。.sort()二維數組javascript比較第二項

newInv = [ 
    [2, "Hair Pin"], 
    [3, "Half-Eaten Apple"], 
    [67, "Bowling Ball"], 
    [7, "Toothpaste"] 
]; 

回答

0

很難確定你做錯了什麼,並解釋爲什麼,當你沒有包括你的非工作代碼。

但是,我認爲你的問題是在執行比較功能。比較功能需要兩個參數,從陣列中的兩個項目進行排序,並回報:

  • 1(或任意正整數),如果第一個項目在您的排序順序是:第二項
  • 0如果它們是「相同的」
  • -1(或任何負整數),如果第一個項目在您的排序順序是:之前第二項。

這裏是一個比較功能,你想要做什麼:

newInv = [ 
 
[2, "Hair Pin"], 
 
[3, "Half-Eaten Apple"], 
 
[67, "Bowling Ball"], 
 
[7, "Toothpaste"] 
 
]; 
 

 
compareFn = function(a, b) { 
 
    if (a[1] == b[1]) return 0; 
 
    return a[1] > b[1] ? 1 : -1; 
 
}; 
 

 
newInv.sort(compareFn); 
 

 
alert(newInv);

-1

試試這個;

newInv = [ 
    [2, "Hair Pin"], 
    [3, "Half-Eaten Apple"], 
    [67, "Bowling Ball"], 
    [7, "Toothpaste"] 
]; 

//classical nested loop for sorting 

for(i=0;i<newInv.length;i++) 
{ 
    for(j=i+1;j<newInv.length;j++) 
    { 
    //alphabetical comparing of second elements 

    if(newInv[i][1].localeCompare(newInv[j][1])>0) 
    { 
     //swapping values 
     var x=newInv[i]; 
     newInv[i]=newInv[j]; 
     newInv[j]=x; 
    } 
    } 
} 

//display sorted array 
console.log(newInv) 
+0

爲什麼投反對票?請解釋。 –

1

您可以結合使用sort()localeCompare()返回排序的數組。

var newInv = [ 
 
    [2, "Hair Pin"], 
 
    [3, "Half-Eaten Apple"], 
 
    [67, "Bowling Ball"], 
 
    [7, "Toothpaste"] 
 
]; 
 

 
var result = newInv.sort(function(a, b) { 
 
    return a[1].localeCompare(b[1]) 
 
}) 
 

 
console.log(result)