javascript,基于arry2排序array1

时间:2011-05-05 12:34:58

标签: javascript arrays sorting

我在javascript中执行了以下操作:

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 );

我的目的是根据array1array2进行排序。我期待结果为1,3,2,4,但事实证明它是2,1,3,4,任何人都可以找出原因吗?感谢

2 个答案:

答案 0 :(得分:2)

数组是0索引的,所以你的排序函数开始与第二个和第五个一直比较;忽略第一个元素和没有第5个元素的事实。

在sort函数中插入-1应修复它:

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

结果确实是[1, 3, 2, 4]

答案 1 :(得分: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/