3 回答

TA貢獻1831條經(jīng)驗 獲得超10個贊
您可以嘗試使用find()和includes()對象的 name 屬性,最后使用filter().
演示:
var list = [
{
name:'aa',
searchWords:['aa','ab','bc']
},
{
name:'bb',
searchWords:['bb','bc','de']
}
]
document.getElementById('searchWord').addEventListener('input', function(){
console.clear();
var filterItems = list.find(item => item.name.includes(this.value));
filterItems = filterItems ? filterItems.searchWords : [];
filterItems = filterItems.filter(i => i.includes(this.value));
console.log(filterItems);
});
<input id="searchWord"/>

TA貢獻2016條經(jīng)驗 獲得超9個贊
您需要遍歷 searchWords 數(shù)組以查找它是否與搜索詞匹配。這個會工作
const filterItems = list.filter(
(item) => item.searchWords.filter((myWord) => myWord.indexOf(searchWord)>-1)
);

TA貢獻1820條經(jīng)驗 獲得超9個贊
代碼的問題在于,當您使用 indexOf 時,它會嘗試查找數(shù)組是否包含單詞。例如:當您搜索 'a' 時,代碼會檢查數(shù)組中是否有任何單詞 'a' 而不是任何包含字母 'a' 的單詞。
您需要將 JS 部分更改為:
JS
const list = [{
name: 'aa',
searchWords: ['aa', 'ab', 'bc']
},
{
name: 'bb',
searchWords: ['bb', 'bc', 'de']
}
];
let searchWord = "a";
const filterItems = list.filter(
(item) => item.searchWords.filter(word => word.includes(searchWord)).length > 0
);
document.getElementById('result').innerHTML = JSON.stringify(filterItems);
<p id="result">
</>
添加回答
舉報