问题描述
我的JSON文件
[ { "id": 1, "task": "go dancing", "status": false }, { "id": 2, "task": "Walk", "status": false } ]
我真是停留在我的OOP,我试图找到的财产Status
在我的JSON,我想更新属性布尔TP是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循环中写入文件时,在forloop之后,实际数据未更改,并且该status
仍然为false
1楼
考虑使用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);
您还应该记住, 不返回任何内容,但是如果失败则抛出错误。
考虑一下,将其包装在try / catch中:
static writeFile(data) {
try {
fs.writeFileSync("./data.json", JSON.stringify(data, null, 2) , 'utf8');
}
catch(e){
console.warn(e.message);
}
}