Проверьте pmtools сценарии на CPAN. При использовании Debian (-базирующийся) дистрибутив существует также удобное пакет pmtools . Это включает сценарий "pmvers", который говорит Вам версию модуля. Это довольно удобно.
Это делает что-то подобное различным отправленным людям острот, но это немного более умно об обработке ошибок и может дать Вам версию больше чем одного модуля сразу.
Однолинейное решение ES6. Так много ответов, использующих объект в качестве карты, но я не вижу никого, кто бы использовал фактическую карту
const map = arr.reduce((acc, e) => acc.set(e, acc.get(e) + 1 || 1), new Map());
Используйте map.keys()
, чтобы получить уникальные элементы
Используйте map.values()
, чтобы получить события
Я надеюсь, что по крайней мере один человек найдет это полезным.
var arr = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4]
const map = arr.reduce((acc, e) => acc.set(e, acc.get(e) + 1 || 1), new Map());
console.log(...map.keys())
console.log(...map.values())
Этот вопрос более 8 лет , и многие, многие ответы на самом деле не учитывают ES6 и его многочисленные преимущества.
Возможно, еще более важно подумать о последствиях нашего кода для сбора мусора / управления памятью всякий раз, когда мы создаем дополнительные массивы, делаем двойные или тройные копии массивов. или даже конвертировать массивы в объекты. Это тривиальные наблюдения для небольших приложений, но если масштаб является долгосрочной целью, подумайте об этом тщательно.
Если вам просто нужен «счетчик» для определенных типов данных, а отправной точкой является массив (поэтому я предполагаю, что вы хотите упорядоченный список и воспользоваться множеством свойств и методов, предлагаемых массивами), вы можете просто просто переберите массив array1 и заполните array2 значениями и числом вхождений для этих значений, найденных в array1.
Так просто.
Пример простого класса SimpleCounter (ES6) для объектно-ориентированного программирования и объектно-ориентированного проектирования
class SimpleCounter {
constructor(rawList){ // input array type
this.rawList = rawList;
this.finalList = [];
}
mapValues(){ // returns a new array
this.rawList.forEach(value => {
this.finalList[value] ? this.finalList[value]++ : this.finalList[value] = 1;
});
this.rawList = null; // remove array1 for garbage collection
return this.finalList;
}
}
module.exports = SimpleCounter;
Используя Набор можно извлечь уникальные числа затем, можно отфильтровать вход для получения количества каждого числа:
input = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4]
setOcc = new Set(input)
arrOcc = [...setOcc]
arrNumberOcc = arrOcc.map(occ => input.filter(e => e===occ).length);
console.log(arrOcc, arrNumberOcc)