Как мне удалить текст из вывода этого уменьшенного массива?

У меня есть массив: ['Online Learning', 'Online Learning', 'Online Learning', 'Communications', 'Communications', 'Intranet']

Я использую приведенное ниже значение, чтобы найти частоту/встречания каждого значения в этом массиве:

const catsReduced = cats.reduce((acc: any, currentValue: any) => (acc[currentValue] = (acc[currentValue] || 0) + 1, acc), {});

Это выводит:

{Online Learning: 3, Communications: 2, Intranet: 1}

Как бы мне отредактировать приведенный выше редуктор, чтобы он показывал только:

[3,2,1]

(как типы чисел). Я не уверен, что смогу выразиться яснее, но, пожалуйста, скажите, если требуется больше.

Object.values(catsReduced)
mandy8055 23.02.2024 17:20

Если вы ориентируетесь на версии старше ES2017 и не хотите менять цель на ES2017 или новее, Object.keys() вместе с map также может помочь. Использование этого TS не будет жаловаться

mandy8055 23.02.2024 17:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
71
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вместо использования объекта для хранения счетчиков вы можете напрямую поместить счетчики в массив.

1- перебираем массив с помощью reduce и подсчитываем вхождения каждого элемента.

2-извлеките значения (счетчики) из полученного объекта, используя Object.values().

3- результирующий массив содержит количество каждого уникального значения в том же порядке, в котором они появляются в исходном массиве.

const cats = ['Online Learning', 'Online Learning', 'Online Learning', 'Communications', 'Communications', 'Intranet'];

const counts = Object.values(cats.reduce((acc, currentValue) => {
  acc[currentValue] = (acc[currentValue] || 0) + 1;
  return acc;
}, {}));

console.info(counts);

Edit: если машинописный текст выдает эту ошибку, попробуйте изменить параметр компилятора lib на es2017 или более позднюю версию, которую, вероятно, можно найти в вашем tsconfig.json файле.

{
  "compilerOptions": {
    "target": "es2017",
    "lib": ["es2017"]
  }
}

Должен был сказать, что я использую TypeScript: я получаю сообщение об ошибке, когда значение свойства Object.values ​​не существует для типа ObjectConstructor. Вам нужно изменить целевую библиотеку? Попробуйте изменить параметр компилятора «lib» на «es2017» или более позднюю версию.ts(2550).

NightTom 23.02.2024 17:26

@NightTom, вы пишете: «Попробуйте изменить параметр компилятора lib». Кому ты это говоришь? Конечно, у вас должна быть поддержка ECMAScript 2017 (который существует уже более шести лет! — вечность для ИТ).

trincot 23.02.2024 17:34

Я предполагаю, что это его сообщение об ошибке

Chris G 23.02.2024 17:37

@trincot - где я это написал?

NightTom 23.02.2024 17:37

@NightTom в вашем первом комментарии к этому ответу

Chris G 23.02.2024 17:38

ааа - это вывод Visual Studio Code. Не от меня. В любом случае смена компилятора все равно не работает.

NightTom 23.02.2024 17:39

Всё равно работает - похоже у меня что-то не так с линтером - слишком он чувствителен. Принятые ответы работают отлично. ОБНОВЛЕНИЕ: Mandy8055 — я использовал Object.keys, это принято. ОБНОВЛЕНИЕ СНОВА! Object.keys не показывает цифры, а показывает текст. Поэтому в данном случае использовать нельзя.

NightTom 23.02.2024 17:43

ок, значит, менять библиотеку тогда не было необходимости?

Chris G 23.02.2024 17:49

@NightTom нет, это не так. Смотрите здесь: tsplay.dev/w1GA8m

mandy8055 23.02.2024 17:50

Нет, в этом не было необходимости — код работает, но в линтере, который я использую, есть что-то слишком деликатное.

NightTom 23.02.2024 17:50

@mandy8055 - ДА! Идеально, работает блестяще. Я поддержу ваши комментарии.

NightTom 23.02.2024 17:53

Альтернативный метод получения частот — использовать Object.groupBy, а затем получить длину каждого массива. (Обратите внимание, что это сокращает код за счет дополнительной траты памяти.)

const cats = ['Online Learning', 'Online Learning', 'Online Learning', 'Communications', 'Communications', 'Intranet'];
const res = Object.values(Object.groupBy(cats, x => x)).map(x => x.length);
console.info(res);

Другие вопросы по теме