Javascript - подсчитывать вхождения в массиве, но не менять порядок

Итак, у меня есть этот код, который должен подсчитывать вхождения чисел, вводимых с помощью массива.

  let counts = {};

  for (let i = 0; i < arr.length; i++) {
    let num = arr[i];
    counts[num] = counts[num] ? counts[num] + 1 : 1;
  }

Я не понимаю, почему он сортирует вводимые мной данные? Например, если я ввожу [1,3,2] на выходе, мой объект говорит:

1: 1 2: 1 3: 1

Заранее спасибо.

Поведение ключевого слова "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
6
44
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

Этого можно добиться с помощью массива для поддержания порядка и объекта для быстрого поиска:

let result = {
   lookup: {},
   counts: []
};

var arr = [1,3,2]
for (let i = 0; i < arr.length; i++) {
  let num = arr[i];
  var item = result.lookup[num];
  if (!item){
       item = {key:num,count:0}
       result.counts.push(item);
       result.lookup[num] = item;
  }
  item.count++;
}


console.info(result.counts);
Ответ принят как подходящий

Вы можете взять Map, который поддерживает порядок, и в результате отобразить массив объектов.

let counts = new Map,
    arr = [1, 3, 2];

for (let i = 0; i < arr.length; i++) {
    let num = arr[i];
    counts.set(num, (counts.get(num) || 0 ) + 1);
}

console.info(Array.from(counts.entries(), ([value, count]) => ({ value, count })));

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