Мой код выдает ошибку, мне нужно выяснить причину

#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");
    }) //<------
  }