#javascript
#javascript
Вопрос:
У меня возникла проблема, когда я ввожу в свою текстовую область другой символ. Что метод .push не является ошибкой функции. Кажется, я не могу найти решение.
updatestats(){
//sample input
let input = "aab";
let collectionresult = [];
for(let i=0;i < input.length;i )
{
let char = input[i];
collectionresult = this.checkuniqueness(collectionresult,char);
}
console.log(collectionresult);
}
checkuniqueness(collection, character) {
let update = false;
for (let i = 0; i < collection.length; i ) {
if (collection[i].character === character) {
collection = {
character: character,
number: collection[i].number 1
}
update = true;
}
}
if (update === false) {
collection.push({
character: character,
number: 1
});
}
return collection;
}
Комментарии:
1. Потому
collection
что это больше не массив:collection = { ... }
2. Если
.push
это не функция, то то, к чему вы ее применяете, не является массивом. Итак, посмотрите, что это такое .
Ответ №1:
В первой функции вы устанавливаете переменную коллекции в качестве массива, но во второй функции вы меняете тип переменной ‘collection’ на объект, но push() определяется только для массивов, поэтому это не может работать :
collection = {
character: character,
number: collection[i].number 1
}
Комментарии:
1. таким образом, вы имеете в виду, что он не обновляет существующий объект в массиве.
2. @johhny Он заменяет весь массив этим объектом. Вы имели в виду присвоение
collection[i]
, а неcollection
.3. Но вы должны просто увеличить счетчик:
collection[i].number ;
4. таким образом, тип массива может измениться на объект, даже если он объявлен как массив.
Ответ №2:
Как указывали другие, вы заменяете collections
массив одним объектом, содержащим обновленный элемент для данного символа. Вы должны просто обновить этот элемент на месте, а не переназначать сам массив, заменив это назначение на:
collections[i].number ;
Вашу функцию также можно упростить, заменив цикл find()
методом.
checkuniqueness(collection, character) {
let counter = collection.find(o => o.character == character);
if (counter) {
counter.number ;
} else {
collection.push({
character: character,
number: 1
});
}
return collection;
}