首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在浏览器上过滤Json数据?

如何在浏览器上过滤Json数据?
EN

Stack Overflow用户
提问于 2010-12-09 01:28:30
回答 2查看 9.6K关注 0票数 3

我有一个搜索结果页面,其中包含搜索结果已经由用户搜索,在这个页面上,我们也有过滤选项,可以缩小现有的搜索,例如,用户可以过滤搜索结果(按价格范围,按品牌,按类别和一些更多的标准)。如果此数据在浏览器上的json对象中可用。如何根据上面提到的几个条件来过滤json数据。

例如,用户搜索液晶电视和所有类型的液晶电视将显示在搜索页面上,但用户可以通过以下选项过滤掉结果。

过滤器选项

按品牌-三星、LG、索尼、JVC、海尔、Bose、Hundayi

Br Price-价格范围滑块100$ - 5000$

最畅销的-

按尺寸-39英寸、49英寸、72英寸

这里是json数据示例

代码语言:javascript
复制
{ 
"productList" : { 
          "product details" : [ 
                {
                    "brand":"Lg",
                    "productname":"Microwave",
                    "price":200
                },
                {
                    "brand":"Samsung",
                    "productname":"Digi cam",
                    "price":120
                },
                {
                    "brand":"Sony",
                    "productname":"Lcd TV",
                    "price":3000
                },
                {
                    "brand":"LG",
                    "productname":"Flat TV",
                    "price":299
                }
                ,
                {
                    "brand":"Samsung",
                    "productname":"Lcd TV",
                    "price":700
                },
                {
                    "brand":"LG",
                    "productname":"Plasma TV",
                    "price":3000
                },
                {
                    "brand":"sony",
                    "productname":"Plasma TV",
                    "price":12929
                }
           ]
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-09 02:54:05

这并不是很灵活,但像这样的东西可能会满足您的需求:

数据存储的过滤函数

代码语言:javascript
复制
// dataStore = JSON object, filter = filter obj
function filterStore(dataStore, filter) {
    return $(dataStore).filter(function(index, item) {
        for( var i in filter ) {
           if( ! item[i].toString().match( filter[i] ) ) return null;
        }
        return item;
    });
}

用法

代码语言:javascript
复制
// result contains array of objects based on the filter object applied
var result = filterStore( store, filter);

我所拥有的数据存储

代码语言:javascript
复制
var store = [
    {"brand": "Lg",
    "productname": "Microwave",
    "price": 200},

    {"brand": "Samsung",
    "productname": "Digi cam",
    "price": 120},

    {"brand": "Sony",
    "productname": "Lcd TV",
    "price": 3000},

    { "brand": "LG",
    "productname": "Flat TV",
    "price": 299},

    {"brand": "Samsung",
    "productname": "Lcd TV",
    "price": 700},

    {"brand": "LG",
    "productname": "Plasma TV",
    "price": 3000},

    {"brand": "sony",
    "productname": "Plasma TV",
    "price": 12929}
];

过滤我使用的对象

代码语言:javascript
复制
// RegExp used could most likely be improved, definitely not a strong point of mine :P
var filter = {
    "brand": new RegExp('(.*?)', 'gi'),
    "productname": new RegExp('(.*?)', 'gi'),
    "price": new RegExp('299', 'gi')
};

var filter2 = {
    "brand": new RegExp('LG', 'gi'),
    "productname": new RegExp('(.*?)', 'gi'),
    "price": new RegExp('(.*?)', 'gi')
};

var filter3 = {
    "brand": new RegExp('Samsung', 'gi'),
    "productname": new RegExp('(.*?)', 'gi'),
    "price": new RegExp('(.*?)', 'gi')
};

var filter4 = {
    "brand": new RegExp('(.*?)', 'gi'),
    "productname": new RegExp('Plasma TV', 'gi'),
    "price": new RegExp('(.*?)', 'gi')
};
票数 3
EN

Stack Overflow用户

发布于 2010-12-09 01:40:06

试一试

代码语言:javascript
复制
// jsonData = [{"brand": "LG"}, {"brand": "Samsung"}]
jsonData.sort(brand);
// render the grid html again

编辑

代码语言:javascript
复制
// you dont require sorting then
var dataBrand = Array();
$.each(jsonData, function() {
    if(this.brand=="LG") dataBrand[this.brand] = this; 
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4390396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档