как обновить объект JSON в классе ООП - PullRequest
0 голосов
/ 13 февраля 2019

мой файл JSON

[
  {
    "id": 1,
    "task": "go dancing",
    "status": false
  },
  {
    "id": 2,
    "task": "Walk",
    "status": false
  }
]

Я действительно застрял в ООП, я попытался найти свойство Status в моем json, и я хочу обновить свойство boolean tp быть true из false

вот мой код

static completed(input) {
    const data = Model.getdAll(); // get './data.json' local host, 
    for (let i = 0; i < data.length; i++) {
      if(data[i].id == input){
        data[i].status = true
        Model.writeFile(data);
        return data
      }
    }
  }

когда я console.log (для этого статического метода это было так

вот мой статический метод writefile

static writeFile(data) {
    return fs.writeFileSync("./data.json", JSON.stringify(data, null, 2) , 'utf8');
  }

// когда я console.log (для этого статического метода это было так

Model { id: 4, task: 'going to gym', status: true }

, когда я записывал файл внутри этого цикла for, а после forloop реальные данные не изменялись ичто status все еще ложь

1 Ответ

0 голосов
/ 13 февраля 2019

Рассмотрите возможность использования Array # find.Объект будет ссылкой на объект внутри массива данных, поэтому его изменение также изменит содержимое данных.

const Model = {
  getdAll: function(){ return [{"id":1,"task":"go dancing","status":!1},{"id":2,"task":"Walk","status":!1}] },
  writeFile: function(data){ console.log(JSON.stringify(data, null, 2)) }
}

function completed(input){
    const data = Model.getdAll(); // get './data.json' local host,
    const object = data.find(({id})=>id === input);
    
    if(!object) throw new Error("Object not found");
    object.status = true;
    Model.writeFile(data);
    return data;
}

const res = completed(1);

Также следует помнить, что fs.writeFileSync ничего не возвращает, но выдает ошибку, если она не удалась.

Подумайте, оберните это в try / catch:

static writeFile(data) {
   try {
      fs.writeFileSync("./data.json", JSON.stringify(data, null, 2) , 'utf8');
   }
   catch(e){
      console.warn(e.message);
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...