Как сделать функцию, которая находит данные массива объекта, не задавая точное значение поиска, совпадающее со значением объекта.
Например, мой массив:
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, не указывая точное значение.
Вы почти закончили, вам просто нужно проверить, включает ли имя вашу строку, а не равно ей:
const found = data.filter(element => element.name.includes(id))
Это отличное решение, просто имейте в виду, что оно чувствительно к регистру!
@ManuelAbascal да, поэтому я перевел все строки в нижний регистр методом toLocaleLowerCase()
Вы можете попробовать использовать метод 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
, поэтому он не охватывает все крайние случаи!
Спасибо за ответ
@NabyelAbascal это решение мне очень поможет, но есть ли способ заставить его работать, даже если я ищу tina2
или tinaaaa
@DjBilljeOfficial Я проведу небольшое исследование, я не уверен в этом прямо сейчас!
Используйте filter() и indexOf()