我在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 );
我的目的是根据array1
对array2
进行排序。我期待结果为1,3,2,4
,但事实证明它是2,1,3,4
,任何人都可以找出原因吗?感谢
答案 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;
}