Повторяющееся элементы массивы js (новичок)

Вам нужно реализовать функцию "sortFruits", которая будет принимать в качестве аргумента массив с названиями фруктов

(['apple', 'banana', 'banana', 'orange', 'apple', 'banana'])

Фрукты могут повторяться N - количество раз.

Результатом функции должен быть массив с уникальными названиями, отсортированный по частоте повторений фрукта в массиве

(['banana', 'apple', 'orange'])

Ответы (1 шт):

Автор решения: Leonid

Впрочем, очень интересное задание! Преподавателю так и надо объяснить, что без создания отдельного class Fruit просто не реально это сделать.

let arr = ['apple', 'banana', 'banana', 'orange', 'apple', 'banana'];

class Fruit {
    constructor(name,num){
        this.name = name;
        this.num = num;
    }
}

let arrOfFruits = [];

arr.forEach(el => {
    let theFruit = arrOfFruits.find(ob => ob.name === el);
    if(theFruit){
        theFruit.num++;
    } else {
        arrOfFruits.push(new Fruit(el, 1));
    }

})

arrOfFruits.sort((a,b) => b.num -a.num);
let resultArray = arrOfFruits.map(fruit => fruit.name);

console.log(resultArray);

Можно и без объектов и классов, конечно:

let arr = ['apple', 'banana', 'banana', 'orange', 'apple', 'banana'];

let arrOfFruits = []; // Объявляем будущий массив массивов с одинаковыми строками

arr.forEach(el => { // Перебираем каждый элемент исходного массива
    let theFruit = arrOfFruits.find(item => item.includes(el)); // Проверяем наличие массива, в котором уже есть массив с таким же элементом
    if(theFruit){ // Если массив есть, то добавляем такой же элемент туда же
        theFruit.push(el);
    } else {
        arrOfFruits.push([el]); //Если нет, то создаем массив с текущим элементом и помещаем в массив массивов
    }

})

arrOfFruits.sort((a,b) => b.length - a.length); // Сортируем массив массивов по длине массивом
let resultArray = arrOfFruits.map(fruit => fruit[0]); // Получаем из массива массивов одноуровневый массив из первых элементов каждого массива

console.log(resultArray);

Можно и подойти с умом))):

let arr = ['apple', 'banana', 'banana', 'orange', 'apple', 'banana'];

let obj = arr.reduce((acc, el) => {
    if(acc[el]){
        acc[el]++;
    } else {
        acc[el] = 1;
    }
    return acc;
}, {});

arr = [...new Set(arr)];

arr = arr.sort((a,b) => obj[b] - obj[a]);

console.log(arr);

→ Ссылка