我需要在网格中添加过滤器选项。我使用固定数据表。这是使用该网格的简单过滤示例。
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数组。 你有什么建议?
答案 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...}]