我正试图通过一个特定的键来筛选具有多个键/值对的对象。我写的代码似乎是在搜索整个对象,而不考虑关键字。。。
如果关键字name
包含搜索项,则返回搜索项。
对象阵列:
export const someArrayOfObjects = [
{ id: '1', name: 'Something' },
{ id: '2', name: 'Another' },
{ id: '3', name: 'Lets do one more' },
]
搜索:
const searchResults = someArrayOfObjects.filter((o) =>
Object.keys(o).some((k) => o[k].toString().toLowerCase().includes(searchTerm.toLowerCase()))
);
所以如果我搜索"Something"
,我只希望它循环通过name
来搜索那个词。。。
您不需要Object.keys
循环。
const someArrayOfObjects = [
{ id: '1', name: 'Something' },
{ id: '2', name: 'Another' },
{ id: '3', name: 'Lets do one more' },
];
let key = 'name';
let searchTerm = 'th';
const res = someArrayOfObjects.filter(o =>
o[key].toLowerCase().includes(searchTerm.toLowerCase()));
console.log(res);
类似于iota,您不需要使用Object.keys创建额外的数组。只需使用"name"键循环/检查原始数组中的每个项。你也可以试着让它更可重复使用,如下所示。
const someArrayOfObjects = [
{ id: '1', name: 'Something' },
{ id: '2', name: 'Another' },
{ id: '3', name: 'Lets do one more' },
];
const search = function (anyArray, searchTerm) {
return anyArray.filter((obj) => {
if (obj.name === searchTerm) {
return obj.name;
}
return false;
});
};
const case1 = search(someArrayOfObjects, 'Something');
console.log(case1);