[英]Filtering JSON Array
我需要在網格中添加過濾器選項,使用固定數據表,這是該網格的簡單過濾示例。
https://github.com/facebook/fixed-data-table/blob/master/examples/old/FilterExample.js
這個例子只按名字過濾Json數組,但是我需要按JSON Array中的所有對象過濾。 例如,可能是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數組的另一個元素的國家/地區值包含“ 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')
您可以在示例代碼的第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行,就可以了。
我建議結合使用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>');
嘗試這個 :
<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...}]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.