Как вы получаете объект в массиве, чтобы прочитать его как toUpperCase? - PullRequest
1 голос
/ 24 апреля 2020

Эта функция работает без метода .toUpperCase. Но я хочу, чтобы он работал с toUpperCase. Что я делаю? В настоящее время я изучаю Javascript из курса удеми:

const notes = [
    {},{
    title: 'My next trip',
    body: 'I would like to go to Spain'
}, {
    title: 'Habbits to work on',
    body: 'Excercise, Eat a bit better'
}, {
    title: 'Office modification',
    body: 'Get a new seat'
}]


function findNote(notes, noteTitle){
    const index = notes.findIndex(function(item, index){
        return item.title.toUpperCase() === noteTitle.toUpperCase()
    })

    return notes[index]
}

const note = findNote(notes, 'Office modification')
console.log(note)

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Вы можете добавить проверку, имеет ли ваш объект массива notes свойство title. Это можно проверить с помощью hasOwnProperty :

if (fooObject.hasOwnProperty('title'))

или в вашем случае:

item.hasOwnProperty('title')

Однако мы хотим найти случаи, когда ключ title не существуют и опускаются такие объекты, потому что если нет title, это означает, что нет метода toUpperCase(). Так что это можно проверить с помощью оператора ! (НЕ):

if (!item.title) // `NOT` + undefined gives `true`
    return false;

Итак, весь код выглядит так:

const notes = [
  {},
  {
      title: 'My next trip',
      body: 'I would like to go to Spain'
  },
  {
      title: 'Habbits to work on',
      body: 'Excercise, Eat a bit better'
  },
  {
      title: 'Office modification',
      body: 'Get a new seat'
  }
]


function findNote(notes, noteTitle) {
  const index = notes.findIndex(function (item, index) {
    if (!item.title)
      return false;

    return item.title.toUpperCase() === noteTitle.toUpperCase()
  })
  return notes[index]
}

const note = findNote(notes, 'Office modification')
console.log(note)
0 голосов
/ 24 апреля 2020

Поскольку вы не предоставили журналы ошибок, я могу только догадываться, в чем дело: вы получили RefernceError в обратном вызове. Если это так, вот почему:

const notes = [
    {},{

заметьте, что у вас есть пустой объект в массиве notes, а title в item.title.toUpperCase() оценивается как undefined, что вызывает ReferenceError Простое удаление пустого объекта решит эту проблему.

Причина, по которой он работает без toUpperCase, заключается в том, что нет разыменования title, вы просто используете === для него, которому все равно, это undefined.

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