前置條件:
項目目錄:
1. msg.json內容
{
"data": [ { "id": 1, "name": "aa" }, { "id": 2, "name": "bb" }, { "id": 3, "name": "cc" }, { "id": 4, "name": "dd" } ], "total": 4 }
2. delete.js
// 若找不到該模塊,則用npm i fs安裝一下即可 var fs = require('fs'); //寫入json文件選項 function deleteData(id){ //現將json文件讀出來 fs.readFile('data/msg.json',function(err,data){ if(err){ return console.error(err); } var msg = data.toString(); //將二進制的數據轉換為字符串 msg = JSON.parse(msg); //將字符串轉換為json對象 //找到對應的數據id進行刪除 for(var i = 0; i < msg.data.length;i++){ if(id == msg.data[i].id){ msg.data.splice(i,1); } } msg.total = msg.data.length; //刷新一下總數,以后分頁會用上 console.log(msg); var str = JSON.stringify(msg,"","\t"); //因為nodejs的寫入文件只認識字符串或者二進制數,因此進行必要的轉換 fs.writeFile('./data/msg.json',str,function(err){ if(err){ console.error(err); } console.log('----------刪除成功-------------'); }) }) } //執行新增數據方法; deleteData(4)
3. 用node執行delete.js,效果如下圖:
可以發現,數據已刪除。有個問題,當數據有id相同時,刪除會有bug。其實也比較好理解,假如有3個id為5的數據,當刪除第一個id為5的數據時,后面的數據前移,此時,for循環i+1其實是定位到了第3個id等於5的數據。因此,解決思路就很清晰了。修改for循環部位,如下:
//找到對應的數據id進行刪除
for (var i = 0; i < msg.data.length; i++) {
if (id == msg.data[i].id) {
msg.data.splice(i, 1);
i = i - 1; //解決方案
}
}
【基礎篇】
【參考資料】
前人栽樹后人乘涼,敬編程界的先行者!