javascript - 使用 $.grep() 基于自定义过滤器过滤列表

标签 javascript jquery json

我想根据某些条件从列表中过滤掉某些对象:

var list = [
    { mode: 1, type: 'foo' }, 
    { mode: 2, type: 'foo' }, 
    { mode: 3, type: 'foo' }, // remove this item
    { mode: 1, type: 'bar' }, 
    { mode: 2, type: 'bar' },
    { mode: 3, type: 'bar' }
];

var blah = $.grep(list, function(x){

    if(x.type === 'foo')
        return x.mode !== 3;
    else
        return true;
});

console.log('result 1:', blah);

http://jsfiddle.net/65LeJ/

这正如预期的那样有效。

我的问题是我有一个从我的服务器作为 JSON 发送的过滤器:

var blah = list;

var filter = [
    { propertyName: 'mode', value: 3 }, 
    { propertyName: 'type', value: 'foo' }
];

$.each(filter, function(k, filterRow){

    blah = $.grep(blah, function(listItem){
        return listItem[filterRow.propertyName] === filterRow.value;
    });

});

http://jsfiddle.net/65LeJ/1/

这显然会过滤掉太多,但这只是为了让您了解它是如何工作的。

我想知道的是您对过滤器应该如何过滤掉与我的第一个示例中相同数量的行的建议。

不,我不想传递表达式并使用 eval()

如果有什么不清楚的地方请告诉我。

最佳答案

最好使用 [].filter[].every

这是我的解决方案:

var list = [
    { mode: 1, type: 'foo' }, 
    { mode: 2, type: 'foo' }, 
    { mode: 3, type: 'foo' }, // remove this item
    { mode: 1, type: 'bar' }, 
    { mode: 2, type: 'bar' },
    { mode: 3, type: 'bar' }
];

var blah = list;

var filter = [{ propertyName: 'mode', value: 3 }, { propertyName: 'type', value: 'foo' }];

var filtered = list.filter(function(listItem) {
    return !filter.every(function(filterItem) {
        return listItem[filterItem.propertyName] === filterItem.value;
    });
});

console.log(filtered);

http://jsfiddle.net/Dogbert/65LeJ/2/

关于javascript - 使用 $.grep() 基于自定义过滤器过滤列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17444877/

相关文章:

javascript - 如何使用 Google Apps 脚本替换电子表格中的文本?

javascript - 为什么 Object.prototype.toString.call(arr) 返回 [object Object] 而不是 [object Array]?

ASP.NET MVC 中的 jQuery CRUD

javascript - 如何使用 jQuery 构建一个简单的表格过滤器?

php - 我如何使用 jQuery 来处理特定的 div,而不是在当前文档中 - 在包含 HTML 的变量中?

json - Pinterest API 图像大小

javascript - 是否可以跟踪用户事件 session 中的互联网断开情况?

javascript - 如何设置组合框的默认选择?

Python Tuple to dict to JSON

javascript - 如何通过onmouseover显示其他数据库信息?