const heroes = [
{name: "Batman", realName: "Bruce Wayne", universe: "DC"},
{name: "Superman", realName: "Clark Kent", universe: "DC"},
{name: "Iron Man", realName: "Tony Stark", universe: "Marvel"},
{name: "Star Lord", realName: "Peter Quill", universe: "Marvel"},
{name: "Venom", realName: "Eddie Brock", universe: "Marvel"}
]
function search(lookup){
const result = heroes.filter(each => {
return each.name.toLowerCase().includes(lookup.toLowerCase()) ||
each.universe.toLowerCase().includes(lookup.toLowerCase())
})
return result
}
console.log(search("DC"))
如果我按名稱“蝙蝠俠”搜索,我將回傳第一個物件。如果我搜索“DC”,我將回傳前兩個物件。我得到了我想要的結果,但是我還有什么其他方法可以迭代英雄而不是使用 || 操作員?如果我還想通過 realName 進行搜索,我將不得不添加另一個回傳值,我希望能提供有關如何實作此目的的輸入。
uj5u.com熱心網友回復:
似乎您正在尋找一種方法來查看給定物件中的所有值。這將是一個使用的好地方Object.values(),它回傳物件中每個值的陣列,所以你的第一個物件看起來像:
["Batman", "Bruce Wayne", "DC"]
偉大的!現在,如果您有一個搜索詞,我們將其稱為lookup方便示例,您可以回圈訪問(或.includes()像您一樣使用 JS 功能)您創建的這個陣列,Object.values()如下所示:
const result = heroes.filter(each => {
let objectValues = Object.values(each);
return objectValues.includes(lookup);
})
我洗掉了您的代碼的某些部分,例如此代碼段的更大功能以及您如何與小寫字串進行比較,但我將其作為一個挑戰。
uj5u.com熱心網友回復:
試試這個:
function search(lookup){
return heros.filter(hero =>{
return Object.values(hero).filter(value => value.includes(lookup))
})
}
uj5u.com熱心網友回復:
我認為這可以幫助你,它也只適用于這些名稱的一部分:
const typedWord = "DC";
const list = [{name: "Batman", company: "DC"}, {name: "Spiderman", company: "Marvel"}]
const filteredList = list.filter(function (object) {
const entries = Object.entries(object).map((entry) => { return entry[0] })
var matches = entries.filter((entry) => { return object[entry].includes(typedWord) })
return matches.length !== 0
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/462166.html
標籤:javascript 循环 搜索 筛选
