Итак, у меня есть этот код, который должен подсчитывать вхождения чисел, вводимых с помощью массива.
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
Заранее спасибо.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы используете объект для захвата результатов, а ключи не имеют неявного порядка, однако, как вы обнаружили, они эффективно работают с целочисленными ключами.
Если вы хотите поддерживать порядок, возможно, используйте массив объектов со свойствами для вашего ключа и счетчика - однако у вас возникнет проблема с поиском нужного элемента для увеличения его счетчика.
Этого можно добиться с помощью массива для поддержания порядка и объекта для быстрого поиска:
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 })));