2011-05-05 98 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