js中如何對嵌套數(shù)組進行filter過濾
js對嵌套數(shù)組進行filter過濾
最近碰到一個需求,對嵌套數(shù)組進行filter過濾,但是搜遍了CSDN,沒有找到合適的答案,最后也是解決了,記錄一下解決方法
由于返回的數(shù)據(jù)類型太復雜,這里只做一個小的樣例
listData = [
? {
? ? name: 'zhangsan'
? ? data: [A,B,C]
? },
? {
? ? name: 'lisi'
? ? data: [D,E,F]
? }
]要求便是在data數(shù)組中進行篩選,篩選出對應的name,filter只能對第一層進行篩選,當時想到的是使用兩層filter,但是沒有用,最后經過多次實驗,最后發(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;
? }
};這個代碼比較全了,包含了篩選的全部邏輯,因為當時刪選的表格下面還有一個分頁條,所以進行了判空,為空就展示全部數(shù)據(jù),加一個分片,不為空,就篩選,看一下代碼的主要部分
// 安裝了lodash,所以用了lodash的篩選
SigList.value = _.filter(allList.value, (item: any) => {?
? return (
? ? (!slectedInfo.sigSelected ||
? ? ?item.sig_name === slectedInfo.sigSelected) &&
? ? ?// 雙層篩選主要代碼,在data數(shù)組中進行find
? ? ?(!slectedInfo.repositiorySelected ||
? ? ?item.repos.find((subItem: string) => {
? ? ? ?return subItem === slectedInfo.repositiorySelected;
? ? ?})) &&
? ? ?(!slectedInfo.maintainerSelected ||
? ? ?item.maintainers.find((subItem: string) => {
? ? ? ? return subItem === slectedInfo.maintainerSelected;
? ? ? }))
? ? );
});這樣就實現(xiàn)了一個雙層的過濾。
js多層數(shù)組的Filter過濾
// 搜索框過濾
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)
}
}
}
//調用
searchFilter(list,key)總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
JS實現(xiàn)仿Windows經典風格的選項卡Tab切換代碼
這篇文章主要介紹了JS實現(xiàn)仿Windows經典風格的選項卡Tab切換代碼,涉及JavaScript元素的遍歷與樣式的修改技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10
layui監(jiān)聽下拉選框選中值變化的方法(包含監(jiān)聽普通下拉選框)
今天小編大家分享一篇layui監(jiān)聽下拉選框選中值變化的方法(包含監(jiān)聽普通下拉選框),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09
詳解Python中l(wèi)ogging日志模塊在多進程環(huán)境下的使用
許多應用程序中都會有日志模塊,用于記錄系統(tǒng)在運行過程中的一些關鍵信息,以便于對系統(tǒng)的運行狀況進行跟蹤。這篇文章給大家主要介紹了在Python中l(wèi)ogging日志模塊在多進程環(huán)境下的使用,需要的朋友可以參考借鑒,下面來一起看看吧。2016-12-12

