У меня есть коллекция имен:Сортировать коллекцию другого массива
[
{last_name: "A", name: "James" },
{last_name: "A", name: "Robert" },
{last_name: "B", name: "Tim"},
{last_name: "B", name: "Bob" },
{last_name: "C", name: "Ricky Ticky" }
]
Тогда у меня есть массив с каждым last_name
в нем, в определенном порядке:
["B", "C", "A"]
Как я могу сортировать моя коллекция по порядку last_names в моем втором массиве?
Что я пробовал:
Лучшее решение, которое я до сих пор, чтобы создать новый массив, а затем цикл через мою коллекцию имен, выдвигая все элементы, которые соответствуют индексу моего SORT массива («B»), затем второй индекс («C») и, наконец, «A». Кажется, многословный или, может быть, underscore.js имеет лучший метод. sortBy
функция
Вы также может сделать один проход над 'lastNameOrder', чтобы построить карту индексов name-> в' Object', а затем использовать этот 'Object' в функции' _.sortBy'. Возможно, это будет быстрее, возможно, нет, возможно, даже не заметно с такими небольшими наборами данных. –
@muistooshort: Это почти то, что делает '_.sortBy' - я бы повторил его работу. (Это также является причиной моего первого комментария о реализации Брэди.) – Amadan
Не совсем. Шварцское преобразование, которое 'sortBy' делает, вызовет' indexOf' 'people.length' раз. Если вы построите карту имени-> индекс вручную, вы бы вообще не назовете 'indexOf', вы просто сделаете один проход через' lastNameOrder', а не линейный поиск 'people.length'; вы в конечном итоге выполняете поиск 'people.length' в индексном объекте name-> вместо всех этих вызовов' indexOf'. –