【发布时间】:2020-11-03 19:24:18
【问题描述】:
- 我需要实现一个表格的搜索功能。
- 我得到了一组具有不必要对象属性的对象。
- 我需要映射数组以获得必要属性,然后进行过滤。
这是我的代码。
const items = [
{
name: 'pathum',
id: 1,
status: true,
createdAt: 'KKKK',
country: {
name: 'SL',
code: 12,
},
},
{
name: 'kasun',
id: 1,
status: true,
createdAt: 'KKKK',
country: {
name: 'USA',
code: 23,
},
},
{
name: 'hansi',
id: 1,
status: true,
createdAt: 'KKKK',
country: {
name: 'GERMANY',
code: 34,
},
},
];
const tableColumns = ['name', 'country.name'];
const onSearch = (e) => {
e = e.toLowerCase();
const mappedItems = items.map((item) => {
Object.keys(item).forEach((key) => {
if (!tableColumns.includes(key)) delete item[key];
});
return item;
});
if (e) {
const result = mappedItems.filter((item) => {
const str = JSON.stringify(item).toLowerCase();
if (str.search(e) >= 0) return item;
});
return result;
} else {
return mappedItems;
}
};
console.log(onSearch('GERMANY'));
在一个item对象中,我只需要获取这两个字段
const tableColumns = ['name', 'country.name'];
但这只会给我 name 属性
const mappedItems = items.map((item) => {
Object.keys(item).forEach((key) => {
if (!tableColumns.includes(key)) delete item[key];
});
return item;
});
我的第一个问题是如何映射以期望得到这样的结果
{
name: 'pathum',
country: {
name: 'SL',
},
},
第二个问题是JSON.stringtfy 映射整个对象。因此,如果我搜索“name”,它将返回所有对象,因为 stringtify 字符串的所有记录中都存在“name”。
在进行字符串化时如何避免对象中的键?
希望大家都清楚我的问题。
如何修改此代码以获得预期的功能?
【问题讨论】:
-
您要搜索所有属性还是只搜索
tableColumns属性?例如:如果您搜索"KKKK",是否要返回所有对象,因为它们都有createdAt,但它不包含在tableColumns中 -
@adiga 我只搜索
tableColumns -
您是在尝试修改原始 items 数组还是尝试在不修改原始数组的情况下创建新数组?
标签: javascript