首页 > 解决方案 > 如何在 OOP 类中更新 Object json

问题描述

我的 JSON 文件

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

我真的被困在我的 OOP 上,我试图Status在我的 json 中找到该属性,我想将属性 boolean tp 更新为truefalse

这是我的代码

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仍然是错误的

标签: javascriptjsonclassoopobject

解决方案


考虑使用 Array#find。Object 将是对数据数组内部对象的引用,因此更改它也会更改数据内部的内容。

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);
   }
}

推荐阅读