将插入和移除修改为仅在保险箱打开时有效,如果保险箱关闭则返回请先打开保险箱
所以我所有的测试用例都工作正常,但我希望能够做到以下几点:在通过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 && !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"
我刚发现一个错别字。
closeSafe() {
// this.Open = false;
this.isOpen = false;
return "The safe is closed";
}
remove(test) {
if (this.isOpen == true) {
let shouldSkip = false;
let message = "";
this.storage = this.storage.filter(element => {
if (element.name == test && !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"
}
获取元素的大小并从safeSize中减去它。