我正在使用yargs创建通过命令行访问的笔记应用程序。输入新标题时,应该检查并确保没有像输入的标题那样的标题,以避免重复。因此,如果没有重复项,则理论上应该评估为!duplicateNote.length
,因为其中没有任何内容。
但是,未定义的对象导致我的应用程序中断,而该应用程序曾在该处运行。我不知道。一切都已正确要求。
APP.JS文件
yargs.command({
command: 'add',
describe: 'Add a new note',
builder: {
title: {
describe: 'Note title',
demandOption: true,
type: 'string'
},
body: {
describe: 'Note body',
demandOption: true,
type: 'string'
}
},
handler(argv) {
notes.addNote(argv.title, argv.body)
}
})
NOTES.JS文件
const addNote = (title, body) => {
const notes = loadNotes()
const duplicateNote = notes.find((note) => note.title === title)
if (!duplicateNote.length) {
notes.push({
title: title,
body: body
})
saveNotes(notes)
console.log(chalk.green.inverse('New note added!'))
} else {
console.log(chalk.bgRed('Note title taken!'))
}
}
const loadNotes= () => {
try {
const dataBuffer = fs.readFileSync('notes.json')
const dataJSON = dataBuffer.toString()
return JSON.parse(dataJSON)
} catch (e) {
return[]
}
}
module.exports = {
addNote: addNote,
removeNote: removeNote,
listNotes: listNotes,
readNote: readNote
}
我希望“已添加新注释!”记录到控制台,但我得到:TypeError: Cannot read property 'length' of undefined
答案 0 :(得分:0)
因为find
一无所有,您得到undefined
。如果要检查,请使用filter
。
const duplicateNote = notes.filter((note) => note.title === title)
filter
始终给出一个数组-find
给出undefined
或找到的任何数据类型。