Повторяющееся элементы массивы 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);