Проблема с сохранением значения ключа объекта

#javascript #class

Вопрос:

Измените вставку и удаление, чтобы работать только в том случае, если сейф открыт, если сейф закрыт, а затем вернитесь, пожалуйста, сначала откройте сейф.

Таким образом, все мои тестовые примеры работают правильно, однако я хочу иметь возможность сделать следующее: после удаления элемента с помощью метода remove я хочу сначала получить доступ к значению размера элемента, сохранить его, а затем удалить этот элемент, чтобы я мог вернуть удаленный размер в сейф.

Я пытался сделать это сам, но я не знаю, как это закодировать, есть какие-нибудь предложения?

 class Safe {
  constructor(safeSize, passcode) {
    this.storage = [];
    this.safeSize = safeSize;
    this.oldSafeSize = this.safeSize;
    this.passcode = passcode; // <---- Modify Safe to have a passcode attribute
    this.isOpen = this.isOpen; //  <---- Add isOpen attribute to the Safe Class                     
  }

  insert(name, size) {
    //add restriction for insert to only work if this.isopen == true
    if (this.isOpen == true) {
      if (this.safeSize - size >= 0) {
        this.safeSize -= size;
        this.storage.push({
          name,
          size
        }); // push it as an object
        return true   " still accepting";
      }
      return false   " size limit reached";
    } //end of isOpen tesecase
    return "Please open the safe first"
  }

  remove(test) {
    if (this.isOpen == true) {
      let shouldSkip = false;
      let message = "";
      this.storage = this.storage.filter(element => {
        if (element.name == test amp;amp; !shouldSkip) {
          //   let temporarySize= this.safeSize;
          shouldSkip = true;
          this.storage.pop(element);
          //adding the size back to the main safe only after
          //deleting an element
          //   this.safeSize = this.oldSafeSize - temporarySize;
          message = "The item "   element.name   " Has been removed"
          return false;
        }
        return true;
      });
      if (!shouldSkip) message = test   " Item not found";
      return message;
    }
    return "Please open the safe first"
  }
  setPassCode(passWord) {
    if (this.passcode == undefined) {
      this.passcode = passWord;
      return "Passcode has been set"
    }
    return "please reset passcode first" // todo make a reset password function

  }

  resetPassCode(providedPasscode) {
    if (this.passcode == undefined) {
      return "Set a passcode first"
    }
    if (providedPasscode == this.passcode) {
      this.passcode = undefined
      return "Passcode has been reset"
    }
    return "Wrong passcode" // or this.passcode != providedPasscode


  }
  openSafe(testCode) {
    if (this.passcode == testCode) {
      this.isOpen = true
      return "The safe is open and ready to use"
    }
    return "Wrong safe passcode"
  }

  closeSafe() {
    this.Open = false;
    return "The safe is closed"
  }
} // end of class

const safe = new Safe(10);
 

тестовые примеры:

 safe.setPassCode("8642"); // => "Passcode has been set"

safe.insert("laptop", 8); // => "Please open the safe first"
safe.remove("laptop"); // => "Please open the safe first"

safe.openSafe("7531"); // => "Wrong passcode"
safe.openSafe("8642"); // => "The safe is open and ready to use"

safe.insert("watermelon", 7); // => true
safe.remove("watermelon"); // => {name: "watermelon", "size: 7"}

safe.closeSafe(); // => "The safe is closed"
safe.insert("watermelon", 7); // => "Please open the safe first"
 

Комментарии:

1. Во время метода удаления получите размер элемента, а затем добавьте его к текущему безопасному размеру.

2. Я не понимаю, как это сделать с помощью классов, не могли бы вы показать мне пример, пожалуйста?

3. Вы уже выполняли аналогичную работу в методе вставки, вычитая размер элемента из безопасного размера. Поэтому добавьте размер элемента таким образом в методе удаления this.safeSize = element.size;

4. Дорогой господь, я написал это как this.size = element.size; и получал NAN 😀 Cooding — это весело

Ответ №1:

Я только что нашел одну опечатку.

 closeSafe() {
  // this.Open = false;
  this.isOpen = false;
  return "The safe is closed";
}
 

Ответ №2:

   remove(test) {
    if (this.isOpen == true) {
      let shouldSkip = false;
      let message = "";
      this.storage = this.storage.filter(element => {
        if (element.name == test amp;amp; !shouldSkip) {
          this.safeSize  = element.size; // you've done similar job in insert method
          shouldSkip = true;
          this.storage.pop(element);
          //adding the size back to the main safe only after
          //deleting an element
          //   this.safeSize = this.oldSafeSize - temporarySize;
          message = "The item "   element.name   " Has been removed"
          return false;
        }
        return true;
      });
      if (!shouldSkip) message = test   " Item not found";
      return message;
    }
    return "Please open the safe first"
  }
 

Получите размер элемента и вычтите его из безопасного размера.