如何使用 GET 从数组中删除某些内容

How to delete something from an Array using GET

下面的代码应该使用 GET 从 JSON 文件的数组中删除某些内容。但是,无论输入什么数字,它只会转到显示错误消息的 else 语句。我似乎无法理解我做错了什么,因为控制台中也没有显示任何错误。

这段代码的objective是删除数组中与JSON文件中元素ID相同的元素。所以如果 get 请求是 delete/02 它应该删除数组中 ID 为 02 的元素,而不是数组中的第三个元素。

var fs = require('fs');
var rawData = fs.readFileSync('toDoList.json');
var tasksArray = JSON.parse(rawData);
console.log(list);



app.get('/delete/:id', function (req, res) {

 for (var i = 0; i < tasksArray.length; i++) {

   if(tasksArray[i]["id"] == req.params['id']) {

    tasksArray.splice([i], 1);

    var json = JSON.stringify(tasksArray);
    fs.writeFileSync("toDoList.json", json, "utf8");
    res.json(tasksArray);

    console.log[i];

    }

    else {
    res = res.status(500);
    res.json({"status": "error"});
   }

  break;

 }

});

这里是 JSON 如果有帮助的话:

[
  {
    "id": "01",
    "desc": "Assignment 1"
  },
  {
    "id": "02",
    "desc": "Assignment 2"
  },
  {
    "id": "03",
    "desc": "Assignment 3"
  },
  {
    "id": "04",
    "desc": "Assignment 4"
  },
  {
    "id": "05",
    "desc": "Assignment 5"
  }
]

我更喜欢基本过滤器:

var tasksArray = [
  {
    "id": "01",
    "desc": "Assignment 1"
  },
  {
    "id": "02",
    "desc": "Assignment 2"
  },
  {
    "id": "03",
    "desc": "Assignment 3"
  },
  {
    "id": "04",
    "desc": "Assignment 4"
  },
  {
    "id": "05",
    "desc": "Assignment 5"
  }
];

var id_to_delete = "02";

var remainingTasks = tasksArray.filter( task => task.id !== id_to_delete );

// write remainingTasks back into the JSON file as before.
console.log( remainingTasks );

根据评论 .splice( i, 1 ); 也应该有效。

PS:我希望 id 是一个实际数字而不是字符串。这将有助于排序,并且您不必在添加项目时检查是否需要在前面加上 0,只需当前长度 + 1 等于下一个 id。

//var fs = require('fs');
//var rawData = fs.readFileSync('toDoList.json');
//var tasksArray = JSON.parse(rawData);
var tasksArray = [
  { "id": "01", "task": "do 1" },
  { "id": "02", "task": "do 2" },
  { "id": "03", "task": "do 3" },
  { "id": "04", "task": "do 4" },
  { "id": "05", "task": "do 5" }
];

console.log( tasksArray );

//app.get('/delete/:id', function (req, res) {

  //var id_to_delete = req.params.id;
  var id_to_delete = "02";
  
  var remainingTasks = tasksArray.filter( task => {
    if ( task.id === id_to_delete ) {
      console.log( 'filtering away task with id: ' + task.id );
      console.log( task );
      return false;
    }
    else return true;
  });
  // Doublecheck that exactly one item was removed.
  if ( remainingTasks.length === tasksArray.length - 1 ) {
    var json = JSON.stringify( remainingTasks );
    // fs.writeFileSync("toDoList.json", json, "utf8");
    // res.json( remainingTasks );
    console.log( json );
  }
  else {
    //res = res.status(500);
   //res.json({"status": "error"});
    console.log( 'error' );
  }

// });