Эффективная сортировка массива по появлению его элементов - PullRequest
0 голосов
/ 06 июля 2019

У меня есть такой массив:

let mixedArr = ["Ship", "Ship", "Boat", "Ship", "Boat", "yacht" ]

Мне нужен результат, который сортирует массив по внешнему виду, например:

let sortedMixedArr = ["Ship", "Boat", "Yacht"]

Кто может предложить решение?

Ответы [ 2 ]

0 голосов
/ 06 июля 2019

Более короткий подход с использованием ключей карты и сортировка их по количеству.

var array = ["Ship", "Ship", "Boat", "Ship", "Boat", "Yacht"],
    map = array.reduce((m, v) => m.set(v, (m.get(v) || 0) + 1), new Map),
    result = [...map.keys()].sort((a, b) => map.get(b) - map.get(a));

console.log(result);
0 голосов
/ 06 июля 2019

Вам нужно посчитать элементы, а затем отсортировать записи по количеству

let mixedArr = ["Ship", "Ship", "Boat", "Ship", "Boat", "yacht" ]

console.log(
  sortByCount(mixedArr)
)

function sortByCount(arr) {
  return [...arr.reduce((map, item) => {
    if(map.has(item)) {
      map.set(item, map.get(item) + 1) 
    } else {
      map.set(item, 1)
    }
    
    return map
  }, new Map).entries()] // create [[name, count]]
  .sort(([_, a], [__, b]) => b - a) // sort by count numerically
  .map(([name]) => name) // extract names
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...