@pavliuk29

Как реализовать поиск по json?

Есть json вида :
[{ 
"id": 242, 
"name": "Abdul Rahman Baba", 
"position": "Left-Back", 
"jerseyNumber": 6, 
"dateOfBirth": "1994-07-02", 
"nationality": "Ghana", 
"contractUntil": "2020-06-30", 
"marketValue": "10,000,000 €" 
}, { 
"id": 435, 
"name": "Falcao", 
"position": "Centre Forward", 
"jerseyNumber": 9, 
"dateOfBirth": "1986-02-10", 
"nationality": "Colombia", 
"contractUntil": "2016-06-30", 
"marketValue": "35,000,000 €" 
}, { 
"id": 1840, 
"name": "Asmir Begovic", 
"position": "Keeper", 
"jerseyNumber": 1, 
"dateOfBirth": "1987-06-20", 
"nationality": "Bosnia-Herzegovina", 
"contractUntil": "2019-06-30", 
"marketValue": "12,000,000 €" 
}]

Как можно и реализовать поиск по такому json с выводом результатов ? Возможно есть какие фрейм-ворки?

То-есть интересует если пользователь наберет в инпут: 12,000,000 € Чтоб вывело всех футболистов с таким гонораром, или например введет введет гонорар не до конца например так 12 тогда по частичному совпадению(всех футболистов в которых встречается в гонораре либо дате рождения число 12), или введет Ghana тогда выведутся все футболисты которые из Ганы, или если введут частично например так: Gh , то выводятся все футболисты в в описании которых есть GH.

Есть ли фрейм-ворки для такого ? И стоит ли их использовать или можно как-то проще решить данную проблему ?
  • Вопрос задан
  • 182 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Kusmich
Для фильтрации массивов можно использовать функцию Array.prototype.filter

Для фильтрации по конкретному полю

var search = "text"
var result = arr.filter(function(el){
    return el.fieldName.indexOf(search) > -1;//fieldName - поле по которому нужно фильтровать
});

Если искать нужно сразу по всем полям, то функцию фильтра можно модифицировать, например, так

var search = "text"
var result = arr.filter(function(el){
    for(var field in el){
        if(el[field].indexOf(search) > -1){
            return true;//если нашли хотя бы одно поле содержащее искомую строку, оставляем объект
        }
    }
    return false;
});
Ответ написан
Комментировать
AlexPTS
@AlexPTS
Full stack веб разработчик
У lodash есть ряд методов фильтрации коллекции объектов по параметрам.
// using the `_.matches` iteratee shorthand
_.filter(users, { 'age': 36, 'active': true });

Сначала фильтруешь все данные по нужному условию, на выходе остается срез данных. А выводишь уже отдельно от поиска/фильтрации.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы