如何使用 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' );
}
// });
下面的代码应该使用 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' );
}
// });