#javascript #text #command-line
#javascript #текст #командная строка
Вопрос:
Я пытаюсь создать список задач командной строки с помощью Javascript. Для этого у меня есть два текстовых файла todo.txt и done.txt . После добавления todo он должен быть сохранен в todo.txt и после вызова функции done с индексом она должна удалить соответствующее задание из todo.txt и сохраните это задание в done.txt . Я создал ниже программу, чтобы сделать то же самое. Но я получаю сообщение об ошибке: data.splice не является функцией, т.Е. объект: анонимный. Пожалуйста, скажите мне, какие изменения мне нужно внести в приведенный ниже код?
var fs = require('fs');
//constants
var todo_file = "todo.txt";
var done_file = "done.txt";
function init(){
if(!fs.existsSync(todo_file)){
console.log("Creating `todo.txt` file");
setTodo([]);
}
if(!fs.existsSync(done_file)){
console.log("Creating `done.txt` file");
setDone([]);
}
}
function getTodo(){
//read file contents
var contents = fs.readFileSync(todo_file);
return contents;
}
function getDone(){
//read file contents
var contents = fs.readFileSync(done_file);
return contents;
}
function setDone(data){
//write to file
fs.writeFileSync(done_file);
}
function setTodo(data){
//write to file
fs.writeFileSync(todo_file);
}
//display usage
function usage() {
console.log("Usage: done [add|check|delete|help] [task]");
console.log("`task` is only a string when using `add` and a numbernfor all other commands.");
console.log("Using the `done` without arguments lists all tasks");
}
//add task
function add(task) {
//get data
var data = getTodo();
//add item
data.push({task:task,completed:false});
//set data
setTodo(data);
//list
list();
}
//check task
function done(task) {
//get data
var data = getTodo();
var done = getDone();
//modify the data (toggle)
done = data.splice(task,task 1);
//set data
setTodo(data);
setDone(done);
//list
list();
}
//delete task
function del(task){
//get data
var data = getTodo();
//delete item
data.splice(task,task 1);
//set data
setTodo(data);
//list
list();
}
//list all tasks
function list() {
//data
var data = getTodo();
if(data.length > 0){
//print the list. using ANSI colors and formating
console.log("x1b[93mx1b[4mTask list:x1b[24m");
data.forEach(function (task,index){
console.log(index 1 "."," [" (task.completed ? "x1b[92m✓x1b[93m" : " ") "] ",task.task);
});
}else{
console.log("x1b[91mNo tasks added!!");
}
}
var command = process.argv[2];
var argument = process.argv[3];
init();
switch(command){
case "add":
add(argument);
break;
case "done":
done(argument-1);
break;
case "delete":
del(argument-1);
break;
case "help":
usage();
break;
case "list":
list();
break;
default:
console.log("x1b[91mCommand not found!!x1b[0m");
usage();
break;
}
Комментарии:
1. Вы не можете хранить массивы Javascript непосредственно внутри файлов, вам потребуется сериализовать ваши данные. используйте JSON.stringify amp; JSON.parse для сериализации данных в и из вашей файловой системы. Ps. Существует множество способов сериализации ваших данных, JSON — самый простой.
Ответ №1:
Как напечатал Кит, вы не должны хранить массивы Javascript непосредственно внутри файлов, вместо этого вы должны сериализовать свои данные. JSON.stringify и JSON.parse — хороший вариант для сериализации данных, поскольку они являются самым простым методом.
Комментарии:
1. Я изменил свой код. Можете ли вы проверить это один раз и сказать мне, как мне написать функцию удаления, принимающую индекс в качестве параметра.