JavaScript, как найти данные массива объекта, не указывая точное значение поиска, которое соответствует значению объекта

Как сделать функцию, которая находит данные массива объекта, не задавая точное значение поиска, совпадающее со значением объекта.

Например, мой массив:

const array = 
[{
    "name": "Max Messi",
    "age": 21,
    "gender": "male"
},
{
    "name": "tina baidya",
    "age": 10,
    "gender": "female"
},
{
    "name": "tina shrestha",
    "age": 100,
    "gender": "female"
}
]

Теперь я хочу, чтобы функция возвращала все данные, содержащие name «tina».

Я пытался использовать метод array.filter(), но для этого требуется точное имя поиска. Например, мне нужно напечатать tina shrestha вместо просто tina

это то, что я пробовал:

const array = 
[{
    "name": "Max Messi",
    "age": 21,
    "gender": "male"
},
{
    "name": "Lina baidya",
    "age": 10,
    "gender": "female"
},
{
    "name": "tina shrestha",
    "age": 100,
    "gender": "female"
}
]
function findData(data, id){
    const found = data.filter(element => element.name === id)
    return found
}
console.info(findData(array, "tina"))//logs empty array as i need to type full search value

Итак, как я могу сделать функцию, которая ищет данные json, не указывая точное значение.

Используйте filter() и indexOf()

John 23.12.2020 16:21
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
357
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы почти закончили, вам просто нужно проверить, включает ли имя вашу строку, а не равно ей:

const found = data.filter(element => element.name.includes(id))

Это отличное решение, просто имейте в виду, что оно чувствительно к регистру!

Manuel Abascal 23.12.2020 16:32

@ManuelAbascal да, поэтому я перевел все строки в нижний регистр методом toLocaleLowerCase()

DjBillje Official 23.12.2020 16:34

Вы можете попробовать использовать метод include() следующим образом:

const array = [
    {
        "name": "Max Messi",
        "age": 21,
        "gender": "male"
    },
    {
        "name": "Lina baidya",
        "age": 10,
        "gender": "female"
    },
    {
        "name": "tina shrestha",
        "age": 100,
        "gender": "female"
    }
]

const findData = (data, searchParam) => {
    return data.filter(element => element.name.includes(searchParam.toLowerCase()));
}

const results = findData(array, "tin");

console.info(results);

Однако это не сработает, если вы ищете, например, tina2 или tinathy, поэтому он не охватывает все крайние случаи!

Спасибо за ответ

DjBillje Official 23.12.2020 16:29

@NabyelAbascal это решение мне очень поможет, но есть ли способ заставить его работать, даже если я ищу tina2 или tinaaaa

DjBillje Official 23.12.2020 16:36

@DjBilljeOfficial Я проведу небольшое исследование, я не уверен в этом прямо сейчас!

Manuel Abascal 23.12.2020 16:43

Другие вопросы по теме