繁体   English   中英

jQuery中的Json过滤

[英]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]

DEMO

您甚至可以扩展它以创建一个函数,该函数也可以通过使用查找对象来返回基于运算符的数据,而不仅仅是返回大于:

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

DEMO

您不需要为此使用jQuery。 您可以使用Array.prototypefilter()方法。 请参见下面的工作片段:

 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM