我已经尝试了很多方法,但我被一个简单的javascript函数卡住了,我不知道我需要在哪里寻找...问题是这样的。
我有一个像这样的Json文件。
{
"blacklist": [
{
"email": "[email protected]"
},
{
"email": "[email protected]"
},
{
"email": "[email protected]"
},
{
"email": "[email protected]"
},
{
"email": "[email protected]"
}
]
}
我想简单地删除一个电子邮件与一个简单的功能,像这样的。
function cancel(email) // parameter that contain the value to delete
{
let rawdata = fs.readFileSync('pvt.json'); //get local json file
let mydata = JSON.parse(rawdata); //parsing rawdata
var key = email; //setting up key
delete mydata.blacklist[key]; //using delete function for delete an element
let data = JSON.stringify(mydata, null, 2); //stringify the result
fs.writeFileSync('pvt.json', data); // overwrite local file with new one with all changes
}
问题是......它不工作......我不知道为什么......我试着阅读文档,但我没有找到任何解决方案😢。
的"... delete
操作符用于删除 财产 从一个 对象,使用属性的名称。你正试图删除一个 条目 从一个 阵列,使用数组中一个对象的属性值。
假设 email
是一个变量,包含您要删除的条目中的电子邮件地址。filter
是实现这一目标的一个简单方法。
mydata.blacklist = mydata.blacklist.filter(entry => entry.email !== email);
filter
从原始数组中符合回调标准的条目建立一个新数组 --在这种情况下,它们的... ... email
财产 不 匹配你要删除的电子邮件地址。
如果你想在原地修改数组,而不是创建一个新的数组,你可以使用 findIndex
和 splice
:
const index = mydata.blacklist.findIndex(entry => entry.email === email);
if (index !== -1) {
mydata.blacklist.splice(index, 1); // Remove the entry at the index
}
删除工程,以删除一项 key-value
从一个 object
. 在这里,你有一个 array of items[objects]
. 你应该使用 filter
去除不需要的 element
.
更新。
function cancel(selectedEmail) {
let rawdata = fs.readFileSync("pvt.json"); //get local json file
let mydata = JSON.parse(rawdata); //parsing rawdata
mydata.blacklist = mydata.blacklist.filter(
(item) => item.email !== selectedEmail.email
);
fs.writeFileSync("pvt.json", JSON.stringify(mydata, null, 2)); // overwrite local file with new one with all changes
}
样本:
const info = {
blacklist: [
{
email: "[email protected]",
},
{
email: "[email protected]",
},
{
email: "[email protected]",
},
{
email: "[email protected]",
},
{
email: "[email protected]",
},
],
};
const selectedEmail = {email: "[email protected]"}
info.blacklist = info.blacklist.filter(item => item.email !== selectedEmail.email)
console.log(info)