javascript数组列表过滤器不起作用

时间:2013-12-20 12:58:47

标签: javascript extjs

我有一个Web服务,此服务返回json数据 示例:

{
     "id": -65000,
     "name": "SIK KULLANILANLAR",
     "stockCode": null,
     "groupId": 200000,
     "price": 0.0,
     "color": null,
     "type": 1,
     "mustModGrpCount": 0,
     "mustModGroups": "0",
     "order": 0,
     "campCount": 0,
     "populer": false
 }, {
     "id": 3882,
     "name": "MILLER",
     "stockCode": "ALK001",
     "groupId": 200042,
     "price": 8.9,
     "color": "aliceblue",
     "type": 3,
     "mustModGrpCount": 0,
     "mustModGroups": "",
     "order": 0,
     "campCount": 0,
     "populer": false
 }, {
     "id": 3883,
     "name": "EFES PILSEN 33 CL",
     "stockCode": "ALK002",
     "groupId": 200042,
     "price": 7.9,
     "color": "aliceblue",
     "type": 3,
     "mustModGrpCount": 0,
     "mustModGroups": "",
     "order": 0,
     "campCount": 0,
     "populer": false
 }

我正在为groupId过滤此数据并且它有效。但我尝试了populer字段的过滤器,但它无效。我猜因为变量类型:populer返回布尔值。

这是有效的:

NewMobile.globals.products.filter('groupId',200000);

但这不起作用

NewMobile.globals.products.filter("populer",true);

有人可以帮我吗?

3 个答案:

答案 0 :(得分:0)

如果 NewMobile.globals.products 是标准数组,则附加到Array对象的过滤器方法应如下所示:

NewMobile.globals.products.filter(function(el) { return el.populer === true; })

因为过滤函数将函数而不是字段作为参数。

您可以在此处阅读MDN文档: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

答案 1 :(得分:0)

@Akori

NewMobile.globals = {
    mesaj: 'selam',
    action: '',
    server: '192.168.50.70',
    branchCode: '0',
    activeTable: '',
    activeFolio: '0',
    activeTableGroup: '',
    activeMustGroup: -1,
    activePid: 0,
    activeMustGroupString: 0,
    activeMustDesc: '',
    activeMustArray: [],
    activeCampProduct: '',
    products: undefined,
    rePrint: '',
    activePax: 1,
    uuid: 'tanimsiz',
    activeSkin: 'Krem'
};

这是启动功能变量。

这是我的要求

NewMobile.globals.products = Ext.create('NewMobile.store.PorductStore');
NewMobile.globals.products.setProxy({url: "http://" + NewMobile.globals.server + ':1002/zulu/newmobile/data.aspx?act=getAllProducts'});
NewMobile.globals.products.getProxy();
NewMobile.globals.products.load(function(a, records, c, d, e){
    if (c !== true) {
        Ext.Viewport.setMasked(false);
        Ext.Msg.alert('uyarı', NewMobile.message.connectionError, Ext.emptyFn);

        return;
    }

});

答案 2 :(得分:0)

每当我运行项目时,这个旧代码都会添加一个新的过滤器。

NewMobile.globals.products.clearFilter();我用这个,问题解决了。  clearFilter正在清除旧过滤器。 感谢您的所有建议,对不起我的英语:)