我如何才能在 Javascript 的数组中仅搜索 object.keys 的细节?
How can I search only in specifics object.keys in a array in Javascript?
我有以下数组:
arr = [
{ id: '1', name: 'Something', code: 'A33', number: '67', house: 'St55' },
{ id: '2', name: 'Another', code: '55', number: '004', house: 'ES' },
{ id: '3', name: 'One more', code: 'DAE', number: '003', house: 'R5' },
];
我正在使用下面的函数 () 作为搜索栏来搜索对象数组 (arr
) 的所有字段,具体取决于用户输入 (value
) :
function findInValues(arr, value) {
value = String(value).toLowerCase();
return arr.filter(o =>
Object.entries(o).some(entry =>
String(entry[1]).toLowerCase().includes(value)
)
);
}
但要解决我的情况,该函数只能搜索键 name
和 house
,搜索必须忽略 id
、code
和 number
.
例如:
value = 55
Result = [
{ id: '1', name: 'Something', code: 'A33', number: '67', house: 'St55' }
];
我的情况应该怎么办?
您可以解构要从要过滤的对象中忽略的键 id
、code
和 number
,然后使用休息语法 ...o
。然后,您可以使用当前用于搜索 o
对象的相同代码。请注意,在下面,我还将 Object.entries()
更改为 Object.values()
,因为您的代码未使用条目数组中的键:
const arr = [
{ id: '1', name: 'Something', code: 'A33', number: '67', house: 'St55' },
{ id: '2', name: 'Another', code: '55', number: '004', house: 'ES' },
{ id: '3', name: 'One more', code: 'DAE', number: '003', house: 'R5' },
];
function findInValues(arr, value) {
value = String(value).toLowerCase();
return arr.filter(({id, code, number, ...o}) =>
Object.values(o).some(val =>
String(val).toLowerCase().includes(value)
)
);
}
console.log(findInValues(arr, 55));
否则,如果您知道要搜索的键(即:name
和 house
),那么您可以明确地检查它们:
const arr = [
{ id: '1', name: 'Something', code: 'A33', number: '67', house: 'St55' },
{ id: '2', name: 'Another', code: '55', number: '004', house: 'ES' },
{ id: '3', name: 'One more', code: 'DAE', number: '003', house: 'R5' },
];
function findInValues(arr, value) {
value = String(value).toLowerCase();
const search = ['name', 'house'];
return arr.filter(o => search.some(key => o[key].toLowerCase().includes(value)));
}
console.log(findInValues(arr, 55));
更短的版本! :)
function findInValues(arr, value) {
value = String(value).toLowerCase();
return arr.filter(({
name,
house
}) =>
(name.toLowerCase() == value || house.toLowerCase() == value)
);
}
我有以下数组:
arr = [
{ id: '1', name: 'Something', code: 'A33', number: '67', house: 'St55' },
{ id: '2', name: 'Another', code: '55', number: '004', house: 'ES' },
{ id: '3', name: 'One more', code: 'DAE', number: '003', house: 'R5' },
];
我正在使用下面的函数 (arr
) 的所有字段,具体取决于用户输入 (value
) :
function findInValues(arr, value) {
value = String(value).toLowerCase();
return arr.filter(o =>
Object.entries(o).some(entry =>
String(entry[1]).toLowerCase().includes(value)
)
);
}
但要解决我的情况,该函数只能搜索键 name
和 house
,搜索必须忽略 id
、code
和 number
.
例如:
value = 55
Result = [
{ id: '1', name: 'Something', code: 'A33', number: '67', house: 'St55' }
];
我的情况应该怎么办?
您可以解构要从要过滤的对象中忽略的键 id
、code
和 number
,然后使用休息语法 ...o
。然后,您可以使用当前用于搜索 o
对象的相同代码。请注意,在下面,我还将 Object.entries()
更改为 Object.values()
,因为您的代码未使用条目数组中的键:
const arr = [
{ id: '1', name: 'Something', code: 'A33', number: '67', house: 'St55' },
{ id: '2', name: 'Another', code: '55', number: '004', house: 'ES' },
{ id: '3', name: 'One more', code: 'DAE', number: '003', house: 'R5' },
];
function findInValues(arr, value) {
value = String(value).toLowerCase();
return arr.filter(({id, code, number, ...o}) =>
Object.values(o).some(val =>
String(val).toLowerCase().includes(value)
)
);
}
console.log(findInValues(arr, 55));
否则,如果您知道要搜索的键(即:name
和 house
),那么您可以明确地检查它们:
const arr = [
{ id: '1', name: 'Something', code: 'A33', number: '67', house: 'St55' },
{ id: '2', name: 'Another', code: '55', number: '004', house: 'ES' },
{ id: '3', name: 'One more', code: 'DAE', number: '003', house: 'R5' },
];
function findInValues(arr, value) {
value = String(value).toLowerCase();
const search = ['name', 'house'];
return arr.filter(o => search.some(key => o[key].toLowerCase().includes(value)));
}
console.log(findInValues(arr, 55));
更短的版本! :)
function findInValues(arr, value) {
value = String(value).toLowerCase();
return arr.filter(({
name,
house
}) =>
(name.toLowerCase() == value || house.toLowerCase() == value)
);
}