Как удалить что-то из массива с помощью GET - PullRequest
0 голосов
/ 17 мая 2019

Код ниже должен удалить что-то из массива из файла JSON с помощью GET.Однако, независимо от того, какое число введено, оно просто переходит к оператору else, отображающему сообщение об ошибке.Кажется, я не могу понять, что я делаю неправильно, поскольку в консоли также не отображаются ошибки.

Цель этого кода - удалить элемент из массива, который совпадает с идентификатором элемента в файле JSON.Поэтому, если запрос get равен delete/02, он должен удалить элемент с идентификатором 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"
  }
]

1 Ответ

0 голосов
/ 17 мая 2019

Я бы предпочел базовый фильтр:

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 равна следующему идентификатору.

//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' );
  }

// });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...