Javascript 过滤JSON数组

Javascript 过滤JSON数组,javascript,jquery,json,Javascript,Jquery,Json,我需要在我的网格中添加过滤选项。我使用固定数据表。下面是该网格的简单过滤示例 这个例子只按名字过滤Json数组,但我需要按Json数组中的所有对象过滤。 例如,可能的JSON数组如下所示: {"id":7,"first_name":"Sarah","last_name":"Hottie", "country":"Sweden","salary":12000}, {"id":9,"first_name":"Mary","last_name":"Parah", "country":"Argen

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

这个例子只按名字过滤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”写入常规输入筛选值时,我需要显示数组的两个元素。因为“id:7”名(Sarah)和“id:9”姓(Parah)包括我的筛选值(“arah”)

如果JSON数组的另一个元素的country值包含“arah”,我也需要显示它

因此,我需要根据JSON数组包含的所有值对其进行过滤。
您有什么建议?

您可以利用阵列的过滤器原型。它将是这样的:

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')

您可以利用阵列的过滤器原型。它将是这样的:

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')

您可以在示例代码的第45行找到filter函数。是的

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行,您应该不会有问题。

您可以在示例代码的第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行,您应该会没事。

我建议将数组#过滤器与数组#部分和类型检查结合使用

var data=[{“id”:7,“first_name”:“Sarah”,“last_name”:“Hottie”,“country”:“Sweden”,“salary”:12000},{“id”:9,“first_name”:“Mary”,“last_name”:“Parah”,“country”:“阿根廷”,“salary”:10000},
搜索='arah',
结果=数据过滤器(函数(a){
返回对象。键(a)。一些(函数(k){
if(a[k]='string'&&&&a[k].indexOf(搜索)){
返回true;
}
if(a[k]=='number'&&&&a[k]==搜索的类型){
返回true;
}
});
});
document.write(“”+JSON.stringify(结果,0,4)+“”)我建议将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”:“阿根廷”,“salary”:10000},
搜索='arah',
结果=数据过滤器(函数(a){
返回对象。键(a)。一些(函数(k){
if(a[k]='string'&&&&a[k].indexOf(搜索)){
返回true;
}
if(a[k]=='number'&&&&a[k]==搜索的类型){
返回true;
}
});
});

document.write(“”+JSON.stringify(结果,0,4)+“”)试试这个:

[Object { id=7, first_name="Sarah", last_name="Hottie", more...}, Object { id=8, first_name="Mary", last_name="Parah", more...}]

试试这个:

[Object { id=7, first_name="Sarah", last_name="Hottie", more...}, Object { id=8, first_name="Mary", last_name="Parah", more...}]

您有一堆json,并且希望从该json获取所需的数据。是吗?是的。我有一个JSON数组,我需要用我的输入过滤器值过滤JSON。如果我们谈论了很多数据,强烈地考虑直接从服务器过滤。只有在处理数量有限的数据时,客户端过滤才会更快。或者,如果您发现自己必须重复搜索相同的数据,您可以使用第一个字母对结果进行分组,从而“索引”数组。您有一堆json,并且希望从该json中获取所需的数据。是吗?是的。我有一个JSON数组,我需要用我的输入过滤器值过滤JSON。如果我们谈论了很多数据,强烈地考虑直接从服务器过滤。只有在处理数量有限的数据时,客户端过滤才会更快。或者,如果您发现自己必须重复搜索相同的数据,则可以使用第一个字母对结果进行分组,从而“索引”数组。