2016-01-25 2 views
1

Мне нужно добавить параметр фильтра в мою сетку. Я использую таблицу фиксированных данных. Вот простой пример фильтрации с этой сеткой.Фильтрация JSON Array

https://github.com/facebook/fixed-data-table/blob/master/examples/old/FilterExample.js

Этот пример фильтровать массив JSON только первый name.But мне нужно фильтровать все объекты в JSON массива. , например, может JSON-массив здесь:

{"id":7,"first_name":"Sarah","last_name":"Hottie", 
"country":"Sweden","salary":12000}, 

{"id":9,"first_name":"Mary","last_name":"Parah", 
"country":"Argentina","salary":10000} 

Когда я пишу «Arah» к общему входному фильтру value.I должен показать оба из двух элементов array.Because «ID: 7» Имени (Sarah) и фамилия «id: 9» (Parah) включают мое значение фильтра («arah»).

Если значение страны другого элемента массива JSON включает «arah», мне также нужно показать это.

Поэтому мне нужно отфильтровать массив JSON всеми его значениями. Что вы предлагаете?

+0

у вас есть куча JSON, и вы хотите получать необходимые данные сюда m, что json. это правильно ? – Monty

+0

Да. У меня есть один массив JSON, и мне нужно отфильтровать этот JSON по значению входного фильтра. – javauser35

+0

Если мы говорим о большом количестве данных, настоятельно рекомендуем фильтровать непосредственно с сервера. Фильтрация на стороне клиента выполняется быстрее, только если вы имеете дело с ограниченными объемами данных. В качестве альтернативы вы можете «индексировать» массив, используя первую букву для группировки результатов, если вы видите, что вам приходится повторно искать одни и те же данные. – Neil

ответ

0

Вы можете использовать прототип фильтра для массива. Это будет примерно так:

var arr = [ {"id":7,"first_name":"Sarah","last_name":"Hottie", 
"country":"Sweden","salary":12000}, {"id":9,"first_name":"Mary","last_name":"Parah","country":"Argentina","salary":10000}] 


var runFilter = function(arr,searchKey) { 

    var filterFn = function(obj) { 

     // Iterate the obj for each key. 
     for (var k in obj) { 
     if (typeof obj[k] == "string" && obj[k].indexOf(searchKey) >= 0) { 
      return true; 
     } 
     } 
    } 


     return arr.filter(filterFn); 
    } 

var filteredArr = runFilter(arr,'arah') 
0

Вы можете найти функцию фильтра в строке 45 примерного кода. Это

return row['firstName'].toLowerCase().indexOf(filterBy.toLowerCase()) >= 0 

Если вы хотите взглянуть на каждую часть объекта, вы можете использовать for...in цикл:

for(var key in row){ 
    if((row[key] + "").indexOf(filterBy) > -1){ 
     return true; 
    } 
} 
return false; 

Заменить строку 45 с кодом выше, и вы должны быть хорошо.

0

Я предлагаю использовать фильтр Array # в сочетании с Array # some и проверкой типа.

var data = [{ "id": 7, "first_name": "Sarah", "last_name": "Hottie", "country": "Sweden", "salary": 12000 }, { "id": 9, "first_name": "Mary", "last_name": "Parah", "country": "Argentina", "salary": 10000 }], 
 
search = 'arah', 
 
result = data.filter(function (a) { 
 
    return Object.keys(a).some(function (k) { 
 
     if (typeof a[k] === 'string' && ~a[k].indexOf(search)) { 
 
      return true; 
 
     } 
 
     if (typeof a[k] === 'number' && ~a[k] === search) { 
 
      return true; 
 
     } 
 
    }); 
 
}); 
 
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

0

Попробуйте:

<script type="text/javascript"> 
     var arr = [ {"id":7,"first_name":"Sarah","last_name":"Hottie","country":"Sweden","salary":12000}, 
        {"id":8,"first_name":"Mary","last_name":"Parah","country":"Argentina","salary":10000}, 
        {"id":9,"first_name":"Gold","last_name":"sonam","country":"India","salary":15000}]; 
     var filterKey = 'arah'; 
     function findJsonString(arr,filterKey){ 
       var result = [];   
       for (var i = arr.length - 1; i >= 0; i--) { 
        var part1 = arr[i].first_name.indexOf(filterKey); 
        var part2 = arr[i].last_name.indexOf(filterKey); 
        // console.log(arr[i]); 
        // console.log(' part 1 : ' + part1 + ' part 2 : ' + part2); 
        if(part1 != -1 || part2 != -1) 
        {       
         result[+i] = arr[i]; 
         // OR result.push(arr[i]);       
        } 
       } 
       return result; 
     }   
     console.log(findJsonString(arr,filterKey)); 
     </script> 

ВЫВОД:

[Object { id=7, first_name="Sarah", last_name="Hottie", more...}, Object { id=8, first_name="Mary", last_name="Parah", more...}] 
Смежные вопросы