ero*_*msr 2 javascript arrays ecmascript-6 lodash
我有一个包含我想要搜索的对象的数组。可搜索数组如下所示:
[
{ value: 0, label: 'john' },
{ value: 1, label: 'johnny' },
{ value: 2, label: 'peter' },
{ value: 3, label: 'peterson' }
]
Run Code Online (Sandbox Code Playgroud)
我使用 Lodash 过滤器方法对此进行搜索:
search = (text) => {
let results = _.filter(
this.props.options,
{ label: text }
);
}
Run Code Online (Sandbox Code Playgroud)
这仅显示与搜索查询(参数)完全匹配的结果text。我需要通过部分匹配来完成这项工作。因此,如果我插入jor ,johnny它应该能够找到“John”和“Johnny”。
我努力了:
search = (text) => {
let results = _.filter(
this.props.options =>
this.props.options.includes({ label: text })
);
}
Run Code Online (Sandbox Code Playgroud)
但是,没有运气。没有错误,也没有结果。我怎样才能做到这一点?
由于您使用的includes是 ES6 标准的一部分,那么我将使用 ES6 Array.prototype.filter而不是 lodash-filter 来解决此任务:
let search = (list, text) =>
list.filter(i => i.label.toLowerCase().includes(text.toLowerCase()));
let list = [
{ value: 0, label: 'john' },
{ value: 1, label: 'johnny' },
{ value: 2, label: 'peter' },
{ value: 3, label: 'peterson' }
];
let result = search(list, 'j');
console.log(result); // [{value: 0, label: "john"}, {value: 1, label: "johnny"}]
Run Code Online (Sandbox Code Playgroud)
另外,.toLowerCase您可以使用“John”而不是“john”。