JavaScript, сортировка array1 на основе arry2 - PullRequest
1 голос
/ 05 мая 2011

Я сделал следующее в 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 кто-нибудь может понять, почему?Спасибо

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

Массивы индексируются 0, поэтому ваша функция сортировки начинает сравниваться со вторым и вплоть до пятого;игнорирование первого элемента и тот факт, что 5-го элемента нет.

Вставка -1 в функцию сортировки должна исправить это:

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

Результат действительно [1, 3, 2, 4]

0 голосов
/ 05 мая 2011

Аргументами в методе 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...