我想知道根据字符串关键字
过滤对象数组的最干净、更好的方法是什么。必须在对象的任何属性中进行搜索。
当我键入 lea
时,我想遍历所有对象及其所有属性以返回包含 lea
的对象
当我键入 italy
时,我想遍历所有对象及其所有属性以返回包含 italy
的对象。
我知道有很多解决方案,但到目前为止我只看到了一些您需要指定要匹配的属性的解决方案。
欢迎使用 ES6 和 lodash!
const arrayOfObject = [{
name: 'Paul',
country: 'Canada',
}, {
name: 'Lea',
country: 'Italy',
}, {
name: 'John',
country: 'Italy',
}, ];
filterByValue(arrayOfObject, 'lea') // => [{name: 'Lea',country: 'Italy'}]
filterByValue(arrayOfObject, 'ita') // => [{name: 'Lea',country: 'Italy'}, {name: 'John',country: 'Italy'}]
最佳答案
您可以对其进行过滤并仅搜索一次出现的搜索字符串。
使用的方法:
Array#filter
, 仅用于过滤带条件的数组,Object.keys
用于获取对象的所有属性名称,Array#some
用于迭代键并在找到时退出循环,String#toLowerCase
为了获得可比较的值(value),String#includes
用于检查两个字符串,如果一个包含另一个。
function filterByValue(array, string) {
return array.filter(o =>
Object.keys(o).some(k => o[k].toLowerCase().includes(string.toLowerCase())));
}
const arrayOfObject = [{ name: 'Paul', country: 'Canada', }, { name: 'Lea', country: 'Italy', }, { name: 'John', country: 'Italy' }];
console.log(filterByValue(arrayOfObject, 'lea')); // [{name: 'Lea', country: 'Italy'}]
console.log(filterByValue(arrayOfObject, 'ita')); // [{name: 'Lea', country: 'Italy'}, {name: 'John', country: 'Italy'}]
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 过滤任何属性包含值的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44312924/