我有以下陣列:
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' },
];
我正在使用下面的函式(source)作為搜索欄來搜索物件陣列的所有欄位(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' }
];
在我的情況下我應該怎么做?
uj5u.com熱心網友回復:
您可以解構鍵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));
uj5u.com熱心網友回復:
更短的版本!:)
function findInValues(arr, value) {
value = String(value).toLowerCase();
return arr.filter(({
name,
house
}) =>
(name.toLowerCase() == value || house.toLowerCase() == value)
);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/421970.html
標籤:
