鑒于以下物件,我想搜索多個字串的所有鍵。我一直在嘗試和搜索,但在這個問題上卻一無所獲。任何人都可以在這里為我提供一些幫助嗎?
搜索這個:
const array = [
{ name: "Blue Iron Chow Chow", status: "Complete", creator: "John" },
{ name: "Purple Steel Husky", status: "Error", creator: "Chris" },
{ name: "Purple Composite Husky", status: "Ready", creator: "Chris" },
{ name: "Aqua Zinc Spaniel", status: "Complete", creator: "Chris" },
{ name: "Fuschia Silver Corgi", status: "Complete", creator: "John" },
];
對于這個字串陣列:
const query = ['chris', 'com'];
將回傳這樣的結果陣列:
[
{ name: "Aqua Zinc Spaniel", status: "Complete", creator: "Chris" },
{ name: "Purple Composite Husky", status: "Ready", creator: "Chris" },
]
如果我對此不清楚,請告訴我。謝謝!
// 更新
請注意,我正在尋找的關鍵是每個物件都必須能夠通過任何鍵(不僅僅是創建者)進行搜索,并且在物件中具有所有搜索字串,而不僅僅是一個或另一個。
uj5u.com熱心網友回復:
const array = [{
name: "Blue Iron Chow Chow",
status: "Complete",
creator: "John"
},
{
name: "Purple Steel Husky",
status: "Error",
creator: "Chris"
},
{
name: "Purple Composite Husky",
status: "Ready",
creator: "Chris"
},
{
name: "Aqua Zinc Spaniel",
status: "Complete",
creator: "Chris"
},
{
name: "Fuschia Silver Corgi",
status: "Complete",
creator: "John"
},
];
const query = ['chris', 'com'];
const filtered = array.filter(obj => {
return query.every(val =>
Object.values(obj).join(" ").toLowerCase().includes(val.toLowerCase()))
})
console.log(filtered)
uj5u.com熱心網友回復:
你可以試試這個:
const array = [
{ name: "Blue Iron Chow Chow", status: "Complete", creator: "John" },
{ name: "Purple Steel Husky", status: "Error", creator: "Chris" },
{ name: "Purple Composite Husky", status: "Ready", creator: "Chris" },
{ name: "Aqua Zinc Spaniel", status: "Complete", creator: "Chris" },
{ name: "Fuschia Silver Corgi", status: "Complete", creator: "John" },
];
const query = ['chris', 'com'];
const result = array.filter(({creator}) => query.includes(creator.toLowerCase()))
console.log(result)
uj5u.com熱心網友回復:
const array = [
{ name: "Blue Iron Chow Chow", status: "Complete", creator: "John" },
{ name: "Purple Steel Husky", status: "Error", creator: "Chris" },
{ name: "Purple Composite Husky", status: "Ready", creator: "Chris" },
{ name: "Aqua Zinc Spaniel", status: "Complete", creator: "Chris" },
{ name: "Fuschia Silver Corgi", status: "Complete", creator: "John" },
];
let filtered = []
array.map((x)=>{
//x contains individual objects of array,
for (let key in x) {
//key in x will get all the keys inside the x , now all we have to check is does the values in x are included in query or not to find that we use the below code
const contains = ['Chris', 'com'].includes(x[key])
console.log(contains)
if(contains) filtered.push(x)
}
})
uj5u.com熱心網友回復:
const array = [
{ name: "Blue Iron Chow Chow", status: "Complete", creator: "John" },
{ name: "Purple Steel Husky", status: "Error", creator: "Chris" },
{ name: "Purple Composite Husky", status: "Ready", creator: "Chris" },
{ name: "Aqua Zinc Spaniel", status: "Complete", creator: "Chris" },
{ name: "Fuschia Silver Corgi", status: "Complete", creator: "John" },
];
const query = ['chris', 'com'];
var result = array.filter(({creator, name, status}) => {
return query.every(item => {
item = item.toLowerCase();
return creator.toLowerCase().includes(item) || name.toLowerCase().includes(item) || status.toLowerCase().includes(item)
})
});
輸出:-
[
{ name: 'Purple Composite Husky', status: 'Ready', creator: 'Chris' },
{ name: 'Aqua Zinc Spaniel', status: 'Complete', creator: 'Chris' }
]
uj5u.com熱心網友回復:
您可以使用.filter()with Object.values()、RegExp()和.every()方法,如下面的演示所示:
const array = [
{ name: "Blue Iron Chow Chow", status: "Complete", creator: "John" },
{ name: "Purple Steel Husky", status: "Error", creator: "Chris" },
{ name: "Purple Composite Husky", status: "Ready", creator: "Chris" },
{ name: "Aqua Zinc Spaniel", status: "Complete", creator: "Chris" },
{ name: "Fuschia Silver Corgi", status: "Complete", creator: "John" },
];
const query = ['chris', 'com'];
const filtered = array.filter(
obj => query.every(
term => new RegExp(term, 'i').test(
Object.values(obj).join(" ")
)
)
);
console.log( filtered );
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/376758.html
標籤:javascript 数组 目的
