javascript - 希望当字符串部分或完全匹配对象中的值时此函数返回

标签 javascript filtering lodash

我正在尝试使用 javascript 和 lodash 进行过滤。搜索是使用输入字段执行的,我希望当 this.props.search 部分或完全匹配 file 对象中的值时返回此函数。不使用对象的键名称。

let files = [{
    'id': '00001',
    'fileName' : 'Test01.test',
    'size': 105,
    'uploadDate' : '2016-02-12',
    'permissions' : 'Private'
}, {
    'id': '00002',
    'fileName' : 'Test02.test',
    'size': 111,
    'uploadDate' : '2016-02-10',
    'permissions' : 'Private'
}, {
    'id': '00003',
    'fileName' : 'Test03.test',
    'size': 55,
    'uploadDate' : '2016-02-06',
    'permissions' : 'Shared'
}];

let filteredFiles = files.filter((file) => {
    return _.includes(file, this.props.search);
});

但是使用该函数只有在完全匹配字符串时才会起作用。我究竟做错了什么?如果有建议,我也愿意不使用 lodash。

更新:

我最终使用以下内容:

   let filteredFiles = this.props.files.filter((file) => {
        for (let prop in file) {
            let string = String(file[prop]).toLowerCase();
            if (string.indexOf(this.props.search.toLowerCase()) >= 0) {
                return true;
            }
        }
        return false;
    });

最佳答案

基本上,您希望将 includes() 函数应用于每个属性值(或更准确地说,直到找到匹配项),而不是对象本身。

试试这个:

let filteredFiles = files.filter((file) => {
     return _.some(file, _.partial(_.includes, _, this.props.search, 0));
});

关于javascript - 希望当字符串部分或完全匹配对象中的值时此函数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35466783/

相关文章:

javascript - $save() 上的 $resource 抛出 TypeError : Object #<g> has no method 'push'

javascript - 单击处理程序中未定义 react 上下文值

c# - 使用 Syncfusion GridView 的按需分页或虚拟滚动进行过滤

javascript - lodash 从数组中选取对象字段

javascript - d3.js v4 拖动缩放元素跳跃鼠标

date - 日期之间的primefaces数据表过滤器

javascript - AngularJS不过滤产品列表

javascript - 查询具有随机名称的嵌套对象 - lodash/javascript

javascript - 如何将具有相同键的一组对象组合成一个对象?

javascript - 如何制作与 960.gs 或其他网格框架对齐的可拖动 DIV?