Сортировка массива на основе значений из другого массива
Есть два массива:
let name = ["colin", "amandba", "amandab", "carol", "paul", "joseph"]
let rang = [58, 172, 172, 270, 108, 79]
Значение из массива name соответствует значению массива rang по индексу (например, colin = 58, amandba = 172 и т.д.)
Необходимо отсортировать массив name на основе значений из массива rang (в порядке убывания - от большего rang к меньшему rang)
Если значения в массиве name имеют одинаковые значения в rang (amandba = 172 и amandab = 172) - такие значения нужно отсортировать в алфавитном порядке)
Должно получиться:
["carol", "amandab", "amandba", "paul", "joseph", "colin"]
Подскажите пожалуйста, как сделать такую сортировку.
Ответы (1 шт):
Задача сводится к двум действиям:
получить словарь, где ключом будет слово, и значением
rang. Для этого можно воспользоваться методом.reduce:var map = name.reduce((acc, cur, index)=>{ acc[cur] = rang[index]; return acc; },{});отсортировать массив, проверяя значения из словаря и в случае их равенства сравнивая строки:
var sorted = name.sort((a,b)=>{ var rangA = map[a]; var rangB = map[b]; if (rangA != rangB) return rangB-rangA; // сравниваем ранг // сравниваем строки if (a < b) return 1; if (a > b) return -1; return 0; })