, поэтому я просто учусь кодировать в JS, поэтому я просто хочу предупредить вас, что мой код может выглядеть очень ужасно для вас.
Я хочу "класс", который подсчитывает, как часто число было подсчитано.
Пример:
counter = new Counter();
counter.count(1);
counter.count(1);
counter.count(3);
Вызов getCounts дает результат:
counter.getCounts();
> 1: 2, 3: 1
Мой код работает, но у меня две проблемы.
- Поскольку я храню его в массиве, я могу выводить числа не по порядку, а в порядке их вызова.
- Не думаю, что это симпатичное решение.
Мой код:
class Counter {
constructor(arr = []) {
this.arr = arr;
}
count(number) {
var posNumber = [];
var evenNumCheck = false;
var exactPos;
//Check if have the number already in the array
for (var i = 0; i < this.arr.length; i++) {
if (this.arr[i] === number) {
posNumber.push(i);
}
}
//posNumber we have the position of all the numbers that match our argument number
// we check which of them has an even position, only this can be the number we want
// since we save [number,count; number,count]
for (var i = 0; i < posNumber.length; i++) {
if (i % 2 === 0) {
evenNumCheck = true;
exactPos = i;
}
}
if (evenNumCheck) {
this.arr[exactPos + 1]++;
} else {
this.arr.push(number);
this.arr.push(1);
}
}
getCounts() {
var string = '';
for (var i = 0; i < this.arr.length; i += 2) {
if (i + 2 >= this.arr.length) {
string += this.arr[i] + ': ' + this.arr[i + 1];
} else {
string += this.arr[i] + ': ' + this.arr[i + 1] + ', ';
}
}
console.log(string);
}
}
Считаете ли вы, что это решение в порядке или есть лучшие решения для него, которые также могут выводить числа по порядку?