#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"
}
Получите размер элемента и вычтите его из безопасного размера.