undefined в консоле JavaScript хотя вроде всё нормально

Так, вот основной код:

const people = [
    {name: 'Elena', budget: '2222'},
    {name: 'Luisa', budget: '3000'},
    {name: 'David', budget: '3500'}
]
const person = people.find(function(person) {
    return person.budget === 3500
})

console.log(person)

Если что, скрипт пустой, ничего кроме предоставленного нету То есть, никаких вроде ошибок, и путаниц, но на выходе:

введите сюда описание изображения

P.S. Попробовал вот так:

const person = people.find((person) => {
    return person.budget === 3500
})

console.log(person)

Но тоже без результатно.


Ответы (4 шт):

Автор решения: Алексей Шиманский

У вас в budget - строковые значения. Ищите вы через строгое сравнение с конкретным числом. Внимание вопрос: что должно найтись?

→ Ссылка
Автор решения: Михаил Камахин

Вам лучше бы изменить массив с объектами. Цены на товары не должны быть строками, их лучше сделать числами

Что вы делаете:

  1. Вы проходитесь циклом по массиву (метод find это цикл)
  2. Ходите по объектам person, у которого есть два поля: 1-name, является строкой; 2-budget, является строкой
  3. Проверяете что у объекта person поле budget(является строкой) строго сравниваете, что он будет равняться числу(другой тип данных)

в JavaScript если строго сравнить строку '3500' и число 3500 будет false (ты так сравниваешь в своём примере кода)

const people = [{
    name: 'Elena',
    budget: '2222'
  },
  {
    name: 'Luisa',
    budget: '3000'
  },
  {
    name: 'David',
    budget: '3500'
  }
]
const person = people.find(function(person) {
  return person.budget === '3500'
})

document.write(`
  <h1>Вот чему равняется переменная person:</h1>
  <pre>${JSON.stringify(person)}<pre>
`);

→ Ссылка
Автор решения: Diefair

Вот так будет работать

const person = people.find((person) => {
    return Number(person.budget) === 3500
})

console.log(person)
→ Ссылка
Автор решения: Gelloiss

Ну вам уже вроде максимально подробно все объяснили. Скину просто два рабочих варианта, но это будут не совсем верные подходы, которые вряд ли стоит использовать на реальных проектах.

const people = [
    {name: 'Elena', budget: '2222'},
    {name: 'Luisa', budget: '3000'},
    {name: 'David', budget: '3500'}
];
const person = people.find(person => parseInt(person.budget) === 3500);

console.log(person)

const people = [
        {name: 'Elena', budget: '2222'},
        {name: 'Luisa', budget: '3000'},
        {name: 'David', budget: '3500'}
    ];
    const person = people.find(person => person.budget == 3500);

    console.log(person)

PS: я заменил Вашу функцию внутри find() на стрелочную лишь для более короткой записи. На работу это никак не влияет и Вы можете передавать функцию, с телом и return внутри, но зачем это делать в данном случае?)

→ Ссылка