【发布时间】:2020-12-20 15:25:26
【问题描述】:
我正在尝试使用 Javascript 创建命令行待办事项列表。为此,我有两个文本文件 todo.txt 和 done.txt。添加 todo 后,它应该存储在 todo.txt 中,并且在使用索引调用 done 函数后,它应该从 todo.txt 中删除相应的 todo 并将该 todo 存储在 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 number\nfor 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[93m\x1b[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;
}
【问题讨论】:
-
您不能将 Javascript 数组直接存储在文件中,您需要对数据进行序列化。使用 JSON.stringify 和 JSON.parse 将数据序列化到您的文件系统。附言。序列化数据的方法有很多,JSON 是最简单的。
标签: javascript text command-line