Удаление значения json с помощью javascript - PullRequest
0 голосов
/ 02 мая 2020

Я пытался разными способами, но я застрял с простой функцией в javascript, и я не знаю, где мне нужно искать ... проблема в следующем:

I у меня есть 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
}

проблема в том ... это не работает ... я не знаю почему ... я пытался прочитать документацию, но я не нашел никакого решения ?

Ответы [ 2 ]

2 голосов
/ 02 мая 2020

Оператор 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
}
0 голосов
/ 02 мая 2020

Удалить работает, чтобы удалить 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: "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)
...