nodejs为什么无法使用过滤器删除元素

时间:2019-07-21 10:44:17

标签: javascript node.js

我在notes.json文件中有一个元素数组,但是在使用filter方法删除它们时遇到了麻烦。

这是我从json文件中读取注释的方式:

const fs = require("fs");
const path = require("path");
const p = path.join(path.dirname(process.mainModule.filename),"data","notes.json");

// this function help me do fast code
const fastFunction = cb => {fs.readFile(p, (err, data) => {if (err) {return cb([]);} else {return cb(JSON.parse(data));}});};

我在另一个fastFunction中使用此removeById,如下所示:

static removeById(id) {fastFunction(notes => {const deleteNote = notes.filter(n => n.id !== id);fs.writeFile(p, JSON.stringify(deleteNote), err => {if (err) {console.log(`Your Error Is: ${err}`);}});});}

最后是我尝试使用removeById函数的方法。

// here i used the function
const postDeleteNotes = (req, res, next) => {
  const myId = req.body.removeById;Note.removeById(myId);res.redirect("/admin");
};

但是,如果我删除便条并尝试再次获取它们,它仍然存在。

我可能做错了什么?

2 个答案:

答案 0 :(得分:0)

我在这里找到了一个陌生人的解决方案:

  

我将其更改为:n => n.id !== id   对此:n => n.id != id

答案 1 :(得分:0)

阅读注释后,我认为您的代码可以执行以下操作:

for(let d in data)

,但是回头看const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; console.log(arr.filter(i => i < 3 || i > 5)); // [1, 2, 6, 7, 8, 9, 10] 会得到5,因为arr[4]函数不会影响原始数组。而是返回修改后的数组。因此,如果要修改原始数组,则需要进行分配。

filter