2011-05-05 99 views
1

我沒有在JavaScript如下:JavaScript中,排序陣列1基於arry2

var arr1 =[1,2,3,4]; 
var arr2 =["ac", "bc", "ad", "e"]; 
var result = arr1 .sort(function(i, j){return arr2[i].localeCompare(arr2[j])}) 
document.write(result); 

我的意圖是基於array2排序array1。我期待的結果是1,3,2,4,但事實證明它是2,1,3,4任何人都可以找出原因嗎?謝謝

回答

2

數組是0索引,所以你的排序功能開始與第二個和所有的方式比較第五;忽略第一個元素和沒有第五個元素的事實。

插入-1排序功能應該修復它:

arr1.sort(function(i, j){ 
    return arr2[i-1].localeCompare(arr2[j-1]) 
}); 

的結果確實[1, 3, 2, 4]

+0

由0索引再次疑惑,非常感謝 – user685275 2011-05-05 13:10:06

0

的參數在sort方法是數組項,而不是他們的索引,所以你需要根據這些項目找到索引,假設這些值是唯一的。

基本例子是:

var result = arr1.sort(function(i, j) { 
    return arr2[Find(arr1, i)].localeCompare(arr2[Find(arr1, j)]); 
}); 

Find功能可以是:

function Find(arr, key) { 
    for (var i = 0; i < arr.length; i++) 
     if (arr[i] == key) 
      return i; 
    return -1; 
} 

測試用例:http://jsfiddle.net/tqQDJ/

+0

感謝您的回答,非常感謝。 – user685275 2011-05-05 13:13:26