如果特定关键字包含搜索词,则筛选对象数组



我正试图通过一个特定的键来筛选具有多个键/值对的对象。我写的代码似乎是在搜索整个对象,而不考虑关键字。。。

如果关键字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);

最新更新