我正在尝试使用 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/