我的 JSON 文件
[
{
"id": 1,
"task": "go dancing",
"status": false
},
{
"id": 2,
"task": "Walk",
"status": false
}
]
我真的陷入了 OOP,我试图在 json 中找到属性 Status
,并且我想将属性 boolean tp 从 false 更新为 true
这是我的代码
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 循环内写入文件时,在 for 循环之后,实际数据不会更改,并且 status
仍然为 false
最佳答案
考虑使用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);
}
}
关于javascript - 如何在 OOP 类中更新对象 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54673903/