使用 javascript 删除 json 值
Deleting json value with javascript
我尝试了很多方法,但我被 javascript 中的一个简单函数卡住了,我不知道我需要在哪里寻找...问题是这样的:
我有一个像这样的 Json 文件:
{
"blacklist": [
{
"email": "strangemail@gmail.com"
},
{
"email": "strangemail1@gmail.com"
},
{
"email": "strangemail2@gmail.com"
},
{
"email": "fianlt@gmail.com"
},
{
"email": "finalstatustest@gmail.com"
}
]
}
我想简单地删除一封具有如下简单功能的电子邮件:
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
运算符用于从 对象 中删除 属性,使用 属性的名字。您正在尝试使用数组中对象的 属性 的值从 数组 中删除 entry。
假设 email
是一个变量,其中包含您要删除的条目中的电子邮件地址,filter
是一种简单的方法:
mydata.blacklist = mydata.blacklist.filter(entry => entry.email !== email);
filter
从原始数组中满足回调条件的条目构建一个新数组——在这种情况下,它们的 email
属性 与您要删除的电子邮件地址不匹配。
如果您想就地修改数组而不是创建一个新数组,您可以使用 findIndex
and splice
:
const index = mydata.blacklist.findIndex(entry => entry.email === email);
if (index !== -1) {
mydata.blacklist.splice(index, 1); // Remove the entry at the index
}
Delete 用于从 object
中删除 key-value
。这里有一个 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: "strangemail@gmail.com",
},
{
email: "strangemail1@gmail.com",
},
{
email: "strangemail2@gmail.com",
},
{
email: "fianlt@gmail.com",
},
{
email: "finalstatustest@gmail.com",
},
],
};
const selectedEmail = {email: "finalstatustest@gmail.com"}
info.blacklist = info.blacklist.filter(item => item.email !== selectedEmail.email)
console.log(info)
我尝试了很多方法,但我被 javascript 中的一个简单函数卡住了,我不知道我需要在哪里寻找...问题是这样的:
我有一个像这样的 Json 文件:
{
"blacklist": [
{
"email": "strangemail@gmail.com"
},
{
"email": "strangemail1@gmail.com"
},
{
"email": "strangemail2@gmail.com"
},
{
"email": "fianlt@gmail.com"
},
{
"email": "finalstatustest@gmail.com"
}
]
}
我想简单地删除一封具有如下简单功能的电子邮件:
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
运算符用于从 对象 中删除 属性,使用 属性的名字。您正在尝试使用数组中对象的 属性 的值从 数组 中删除 entry。
假设 email
是一个变量,其中包含您要删除的条目中的电子邮件地址,filter
是一种简单的方法:
mydata.blacklist = mydata.blacklist.filter(entry => entry.email !== email);
filter
从原始数组中满足回调条件的条目构建一个新数组——在这种情况下,它们的 email
属性 与您要删除的电子邮件地址不匹配。
如果您想就地修改数组而不是创建一个新数组,您可以使用 findIndex
and splice
:
const index = mydata.blacklist.findIndex(entry => entry.email === email);
if (index !== -1) {
mydata.blacklist.splice(index, 1); // Remove the entry at the index
}
Delete 用于从 object
中删除 key-value
。这里有一个 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: "strangemail@gmail.com",
},
{
email: "strangemail1@gmail.com",
},
{
email: "strangemail2@gmail.com",
},
{
email: "fianlt@gmail.com",
},
{
email: "finalstatustest@gmail.com",
},
],
};
const selectedEmail = {email: "finalstatustest@gmail.com"}
info.blacklist = info.blacklist.filter(item => item.email !== selectedEmail.email)
console.log(info)