js中如何對(duì)嵌套數(shù)組進(jìn)行filter過(guò)濾
js對(duì)嵌套數(shù)組進(jìn)行filter過(guò)濾
最近碰到一個(gè)需求,對(duì)嵌套數(shù)組進(jìn)行filter過(guò)濾,但是搜遍了CSDN,沒(méi)有找到合適的答案,最后也是解決了,記錄一下解決方法
由于返回的數(shù)據(jù)類型太復(fù)雜,這里只做一個(gè)小的樣例
listData = [
? {
? ? name: 'zhangsan'
? ? data: [A,B,C]
? },
? {
? ? name: 'lisi'
? ? data: [D,E,F]
? }
]要求便是在data數(shù)組中進(jìn)行篩選,篩選出對(duì)應(yīng)的name,filter只能對(duì)第一層進(jìn)行篩選,當(dāng)時(shí)想到的是使用兩層filter,但是沒(méi)有用,最后經(jīng)過(guò)多次實(shí)驗(yàn),最后發(fā)現(xiàn)filter+find可以使用,看一下代碼部分
const filterRepositoryList = () => {
? if (
? ? !slectedInfo.sigSelected &&
? ? !slectedInfo.repositiorySelected &&
? ? !slectedInfo.maintainerSelected
? ) {
? ? repoRenderList.value = repositioryList.value.slice(0, 99);
? ? getSigList(initialParams);
? } else {
? ? SigList.value = _.filter(allList.value, (item: any) => {
? ? ? return (
? ? ? ? (!slectedInfo.sigSelected ||
? ? ? ? ? item.sig_name === slectedInfo.sigSelected) &&
? ? ? ? (!slectedInfo.repositiorySelected ||
? ? ? ? ? item.repos.find((subItem: string) => {
? ? ? ? ? ? return subItem === slectedInfo.repositiorySelected;
? ? ? ? ? })) &&
? ? ? ? (!slectedInfo.maintainerSelected ||
? ? ? ? ? item.maintainers.find((subItem: string) => {
? ? ? ? ? ? return subItem === slectedInfo.maintainerSelected;
? ? ? ? ? }))
? ? ? );
? ? });
? ? paginationData.value.total = SigList.value.length;
? }
};這個(gè)代碼比較全了,包含了篩選的全部邏輯,因?yàn)楫?dāng)時(shí)刪選的表格下面還有一個(gè)分頁(yè)條,所以進(jìn)行了判空,為空就展示全部數(shù)據(jù),加一個(gè)分片,不為空,就篩選,看一下代碼的主要部分
// 安裝了lodash,所以用了lodash的篩選
SigList.value = _.filter(allList.value, (item: any) => {?
? return (
? ? (!slectedInfo.sigSelected ||
? ? ?item.sig_name === slectedInfo.sigSelected) &&
? ? ?// 雙層篩選主要代碼,在data數(shù)組中進(jìn)行find
? ? ?(!slectedInfo.repositiorySelected ||
? ? ?item.repos.find((subItem: string) => {
? ? ? ?return subItem === slectedInfo.repositiorySelected;
? ? ?})) &&
? ? ?(!slectedInfo.maintainerSelected ||
? ? ?item.maintainers.find((subItem: string) => {
? ? ? ? return subItem === slectedInfo.maintainerSelected;
? ? ? }))
? ? );
});這樣就實(shí)現(xiàn)了一個(gè)雙層的過(guò)濾。
js多層數(shù)組的Filter過(guò)濾
// 搜索框過(guò)濾
function searchFilter(list, key, num, prevList) {
for (let i = list.length - 1; i >= 0; i--) {
let item = list[i]
if (item.children && Array.isArray(item.children) && item.children.length > 0) {
searchFilter(item.children, key, i, list);
} else {
if (item.title && !item.title.includes(key)) {
list.splice(i, 1)
}
}
}
if (Array.isArray(list) && list.length == 0) {
if(prevList && num){
prevList.splice(num, 1)
}
}
}
//調(diào)用
searchFilter(list,key)總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
bootstrap Table實(shí)現(xiàn)合并相同行
這篇文章主要為大家詳細(xì)介紹了bootstrapTable實(shí)現(xiàn)合并相同行,fastadmin框架同樣使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
javascript中JSON對(duì)象與JSON字符串相互轉(zhuǎn)換實(shí)例
這篇文章主要介紹了javascript中JSON對(duì)象與JSON字符串相互轉(zhuǎn)換,實(shí)例分析了json對(duì)象與字符串常用的幾種轉(zhuǎn)換技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
JavaScript中的一些隱式轉(zhuǎn)換和總結(jié)(推薦)
這篇文章主要介紹了JavaScript中的一些隱式轉(zhuǎn)換和總結(jié),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-12-12
Javascript 類型轉(zhuǎn)換、封閉函數(shù)及常見(jiàn)內(nèi)置對(duì)象操作示例
這篇文章主要介紹了Javascript 類型轉(zhuǎn)換、封閉函數(shù)及常見(jiàn)內(nèi)置對(duì)象操作,結(jié)合實(shí)例形式分析了JavaScript類型顯示轉(zhuǎn)換、隱式轉(zhuǎn)換、變量作用域、封閉函數(shù)及常用內(nèi)置對(duì)象相關(guān)操作技巧,需要的朋友可以參考下2019-11-11
js數(shù)組相減簡(jiǎn)單示例【刪除a數(shù)組所有與b數(shù)組相同元素】
這篇文章主要介紹了js數(shù)組相減,結(jié)合簡(jiǎn)單示例形式分析了JavaScript刪除a數(shù)組所有與b數(shù)組相同元素相關(guān)個(gè)遍歷、判斷、刪除等相關(guān)操作技巧,需要的朋友可以參考下2020-03-03
js實(shí)現(xiàn)仿Windows風(fēng)格選項(xiàng)卡和按鈕效果實(shí)例
這篇文章主要介紹了js實(shí)現(xiàn)仿Windows風(fēng)格選項(xiàng)卡和按鈕效果的方法,可實(shí)現(xiàn)類似windows選項(xiàng)卡風(fēng)格的tab標(biāo)簽效果,需要的朋友可以參考下2015-05-05

