过滤JSON数组

时间:2016-01-25 08:24:33

标签: javascript jquery json

我需要在网格中添加过滤器选项。我使用固定数据表。这是使用该网格的简单过滤示例。

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

此示例仅按名字过滤Json数组。但我需要按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”写入一般输入过滤器值时。我需要显示array的两个元素。因为“id:7”的第一个名字(Sarah)和“id:9”的姓氏(Parah)包括我的过滤值(“arah”)。

如果JSON数组的另一个元素的国家/地区值包含“arah”,我也需要显示它。

所以我需要通过它包含的所有值来过滤JSON数组。 你有什么建议?

4 个答案:

答案 0 :(得分: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')

答案 1 :(得分: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行,你应该没问题。

答案 2 :(得分:0)

我建议将Array#filter与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>');

答案 3 :(得分: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...}]