【基础篇】js对本地文件增删改查--删
前置条件:
项目目录:
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; //解决方案
}
}
【基础篇】
【参考资料】
前人栽树后人乘凉,敬编程界的先行者!