[英]Json Filtering in jquery
您好,我想在没有alasql.js或linq.js插件或任何插件的帮助下过滤sql查询之类的json数据。 例如
{
"Managing PCL": [
{
"idItScreen": "1436",
"topicName": "Managing PCL",
"isFav": 0,
"cdeItScreen": "ListActiveTarif",
"busScreenName": "My Current Tarif"
},
{
"idItScreen": "1437",
"topicName": "Managing PCL",
"isFav": 0,
"cdeItScreen": "ListTermineTarif",
"busScreenName": "History Tarif"
}
]
}
例如,我需要在idItScreen> 1430处获取数据,以便必须显示json数据,主要的挑战是没有插件才能做到,所以请向我推荐一个很好的解决方案,无需插件就可以做到这一点
首先将您的JSON转换为Javascript对象:
var obj = JSON.parse(myJSON);
然后进行过滤:
var matches = [];
var arr = obj['Managing PCL'];
for (var i = 0; i < arr.length; i++) {
if (arr[i].idItScreen > 1430) {
matches.push(arr[i]);
}
}
或使用jQuery.grep :
var matches = jQuery.grep(obj['Managing PCL'], function(n, i) {
return n.idItScreen > 1430;
});
现在, matches
包含相匹配的项目。
如果要再次获取JSON,只需使用JSON.stringify
:
var filteredJSON = JSON.stringify({'Managing PCL': matches});
您也可以简单地使用.filter
:
var matches = [];
var all = obj['Managing PCL'];
var filtered = all.filter(function(){
return $(this).idItScreen > 1430;
})
您不需要jQuery。 在数据上使用filter
。
function filterData(data, key, value) {
return data.filter(function (el) {
return el[key] > value;
});
}
// Note, `filter` operates on arrays, so you need to specify the
// array that contains the data
var result = filterData(data['Managing PCL'], 'idItScreen', '1430');
还要注意, filter
返回一个新数组,其中包含找到的符合您条件的对象。 您可以按通常的方式访问这些对象:例如result[0]
。
您甚至可以扩展它以创建一个函数,该函数也可以通过使用查找对象来返回基于运算符的数据,而不仅仅是返回大于:
var lookup = {
'>': function (data, value) { return data > value; },
'<': function (data, value) { return data < value; },
'===': function (data, value) { return data === value; }
}
function filterData(data, key, operator, value) {
return data.filter(function (el) {
return lookup[operator](el[key], value);
});
}
filterData(data['Managing PCL'], 'idItScreen', '>', '1430');
filterData(data['Managing PCL'], 'idItScreen', '===', '1430');
您不需要为此使用jQuery。 您可以使用Array.prototype
的filter()
方法。 请参见下面的工作片段:
var obj = { "Managing PCL": [{ "idItScreen": "1436", "topicName": "Managing PCL", "isFav": 0, "cdeItScreen": "ListActiveTarif", "busScreenName": "My Current Tarif" }, { "idItScreen": "1437", "topicName": "Managing PCL", "isFav": 0, "cdeItScreen": "ListTermineTarif", "busScreenName": "History Tarif" }] }; var filteredArray = obj['Managing PCL'].filter(function(item) { return item.idItScreen > 1430; }); obj['Managing PCL'] = filteredArray; document.getElementById('result').innerHTML = JSON.stringify(obj);
<div id="result"></div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.