#javascript #class
Вопрос:
Я получаю ожидаемую ошибку в своем коде, и я понятия не имею, почему.
«, «ожидал. ide указывает на закрывающую фигурную скобку функции remove, фигурную скобку перед последней фигурной скобкой
Консоль сообщает: неперехваченная синтаксическая ошибка: отсутствует ) после списка аргументов
Напишите метод remove, который удаляет указанный элемент из хранилища и возвращает удаленный элемент, а если он не найден, возвращает строку «Не найден», если имеется несколько элементов с одинаковым именем, возвращает первый найденный.
class Safe {
constructor(safeSize) {
this.storage = [];
this.safeSize = safeSize;
}
insert(name, size) {
if (this.safeSize - size >= 0) {
this.safeSize -= size;
this.storage.push({
name: size
}); // push it as an object
return true;
}
return false;
}
remove(test) {
let shouldSkip = false;
this.storage.forEach(function(element, index) {
if (shouldSkip) {
return;
}
if (element === test) {
shouldSkip = true;
const removedItem = element;
this.storage.pop(element);
return ("The item" removedItem " Has been removed");
}
return (test " Item not found");
}
}
}
> test cases:
>
> safe.insert("watermelon", 7); => true
> safe.insert("plate", 2); => true
>
> safe.remove("money"); => "Not Found"
> safe.remove("watermelon"); => {name: "watermelon", "size: 7"}
> safe.remove("watermelon"); => "Not Found"
Комментарии:
1. Вы говорите, что получаете ожидаемую ошибку. Вы имеете в виду неожиданную ошибку? В чем заключается ошибка? Какая строка кода?
2. «, «ожидал. это все, что я понимаю, ide указывает на закрывающую фигурную скобку функции удалите фигурную скобку перед последней фигурной скобкой
3. Консоль сообщает: неперехваченная синтаксическая ошибка: отсутствует ) после списка аргументов
4. Вы неправильно завершили
this.storage.forEach(...)
вызов. Для этого нужна соответствующая скобка в строке 33.5. Вам нужно иметь
});
послеreturn (test...
Ответ №1:
В вашем коде есть несколько неправильных кодов. Пожалуйста, используйте этот код.
class Safe {
constructor(safeSize) {
this.storage = [];
this.safeSize = safeSize;
}
insert(name, size) {
if (this.safeSize - size >= 0) {
this.safeSize -= size;
this.storage.push({
name, size
}); // push it as an object
return true;
}
return false;
}
remove(test) {
let shouldSkip = false;
let message = "";
this.storage = this.storage.filter( element => {
if(element.name == test amp;amp; !shouldSkip) {
shouldSkip = true;
message = "The item " element.name " Has been removed"
return false;
}
return true;
});
if(!shouldSkip) message = test " Item not found";
return message;
}
}
Комментарии:
1. Спасибо за ваш ответ, мне было интересно, почему я не определился при выполнении функции удаления. Я использовал shouldSkip, потому что хотел завершить цикл forEach, когда он найдет элемент, который должен решить проблему дублирования, если он будет найден, я проверю ваш код, еще раз спасибо !
2. В этом коде я не использую «this.storage.pop(элемент);». И я использовал «shouldSkip» для подтверждения удаления элемента.
3. Еще раз спасибо за ваш ответ, мне просто интересно, почему мой код не может войти в массив с самого начала, потому что когда я его выполняю, ошибок нет, но когда я пробую тестовые случаи:<br/>
safe.insert("watermelon", 7); // => true getting true here<br/> safe.insert("plate", 2); // => true getting true here<br/> safe.remove("money"); // => "Not Found" getting undefined here<br/> safe.remove("watermelon"); // => {name: "watermelon", "size: 7"} getting <br/>undefined here safe.remove("watermelon"); // => "Not Found" getting undefined here
Ответ №2:
Вы пропускаете заключительную скобку для своей функции forEach:
remove(test) {
let shouldSkip = false;
this.storage.forEach(function(element, index) {
if (shouldSkip) {
return;
}
if (element === test) {
shouldSkip = true;
const removedItem = element;
this.storage.pop(element);
return ("The item" removedItem " Has been removed");
}
return (test " Item not found");
}) //<------
}