Почему не работает "! DuplicateNote.length"? - PullRequest
2 голосов
/ 10 июня 2019

Я использую yargs для создания приложения для создания заметок, доступ к которому осуществляется через командную строку. Когда я ввожу новый заголовок, он должен проверить и убедиться, что заголовок, подобный введенному, еще не существует, чтобы избежать дублирования. Поэтому, если дубликата нет, теоретически он должен быть равен !duplicateNote.length, потому что внутри ничего нет.

Однако, неопределенный объект приводит к тому, что мое приложение ломается там, где оно когда-то работало. И я не могу понять это. Все было правильно.

APP.JS FILE

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 FILE

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

1 Ответ

0 голосов
/ 10 июня 2019

Потому что если нечего find, вы получите undefined. Используйте filter, если хотите это проверить.

const duplicateNote = notes.filter((note) => note.title === title)

filter всегда дает массив - find дает либо undefined, либо любой найденный тип данных.

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