用javascript删除json值

问题描述 投票:0回答:1

我已经尝试了很多方法,但我被一个简单的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
}

问题是......它不工作......我不知道为什么......我试着阅读文档,但我没有找到任何解决方案😢。

javascript node.js json api http-delete
1个回答
2
投票

的"... delete 操作符用于删除 财产 从一个 对象,使用属性的名称。你正试图删除一个 条目 从一个 阵列,使用数组中一个对象的属性值。

假设 email 是一个变量,包含您要删除的条目中的电子邮件地址。filter 是实现这一目标的一个简单方法。

mydata.blacklist = mydata.blacklist.filter(entry => entry.email !== email);

filter 从原始数组中符合回调标准的条目建立一个新数组 --在这种情况下,它们的... ... email 财产 匹配你要删除的电子邮件地址。

如果你想在原地修改数组,而不是创建一个新的数组,你可以使用 findIndexsplice:

const index = mydata.blacklist.findIndex(entry => entry.email === email);
if (index !== -1) {
    mydata.blacklist.splice(index, 1); // Remove the entry at the index
}

0
投票

删除工程,以删除一项 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)
© www.soinside.com 2019 - 2024. All rights reserved.