前端實(shí)現(xiàn)列表多條件查詢/搜索功能兩種實(shí)現(xiàn)方法
前言
在前端開(kāi)發(fā)中,實(shí)現(xiàn)一個(gè)多條件查詢功能是常見(jiàn)的需求,尤其是在處理表格數(shù)據(jù)時(shí)。下面我將通過(guò)一個(gè)簡(jiǎn)單的Vue組件示例,來(lái)展示如何實(shí)現(xiàn)一個(gè)多條件查詢功能。
組件數(shù)據(jù)結(jié)構(gòu)
首先,定義組件的數(shù)據(jù)結(jié)構(gòu),包括查詢條件和過(guò)濾后的表格數(shù)據(jù):
data() {
return {
// 列表搜索條件
cseAttributeData: {
parcelCode: "",
landType: "",
isIndexesCover: "",
toSellTaskState: "",
manageState: "",
signDownState: "",
withdrawalWay: ""
},
filterTableData: [], // 原始數(shù)據(jù)
tableData: [] // 過(guò)濾后的數(shù)據(jù)
};
}方法一:逐個(gè)條件過(guò)濾
此方法是通過(guò)遍歷所有查詢條件,然后對(duì)每個(gè)條件應(yīng)用過(guò)濾函數(shù)。這種方法的好處是邏輯清晰,易于理解。
methods: {
// 圖層屬性列表查詢按鈕
cseAttributeDataSubmit() {
let arr = this.filterTableData;
// 通過(guò)遍歷key值來(lái)循環(huán)處理
Object.keys(this.cseAttributeData).forEach(key => {
// 調(diào)用篩選方法
arr = this.filterFunc(this.cseAttributeData[key], key, arr);
});
// 為表格賦值
this.tableData = arr;
},
// 篩選方法
filterFunc(val, target, filterArr) {
// 參數(shù)不存在或?yàn)榭諘r(shí),返回全部數(shù)據(jù)
if (!val) return filterArr;
// 應(yīng)用過(guò)濾條件
return filterArr.filter(item => item[target] && item[target].indexOf(val) > -1);
}
}方法二:一次性過(guò)濾所有條件
此方法是一次性過(guò)濾所有條件,這種方法可以減少遍歷次數(shù),提高效率。
methods: {
// 圖層屬性列表查詢按鈕
cseAttributeDataSubmit() {
this.tableData = this.filterTableData.filter(item => {
// 遍歷所有查詢條件
for (const [k, v] of Object.entries(this.cseAttributeData)) {
if (v) { // 如果條件不為空
if (!item[k] || !item[k].includes(v)) {
return false; // 如果當(dāng)前項(xiàng)不包含查詢條件,則過(guò)濾掉
}
}
}
return true; // 如果所有條件都滿足,則保留
});
}
}總結(jié)
兩種方法各有優(yōu)缺點(diǎn):
- 方法一邏輯清晰,易于理解,但可能效率略低。
- 方法二效率更高,但邏輯稍微復(fù)雜一些。
在選擇實(shí)現(xiàn)方法時(shí),可以根據(jù)實(shí)際項(xiàng)目需求和數(shù)據(jù)量大小來(lái)決定使用哪種方法。如果數(shù)據(jù)量不大,推薦使用方法一,因?yàn)樗子诰S護(hù)和理解。如果數(shù)據(jù)量較大,或者需要更高效的查詢,可以考慮使用方法二。
注意事項(xiàng)
- 確保查詢條件不為空時(shí)才進(jìn)行過(guò)濾。
- 根據(jù)實(shí)際數(shù)據(jù)類型,可能需要對(duì)查詢條件和數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換,比如
toLowerCase()。 - 考慮使用Vue的計(jì)算屬性(computed)來(lái)自動(dòng)更新表格數(shù)據(jù),以提高性能。
到此這篇關(guān)于前端實(shí)現(xiàn)列表多條件查詢/搜索功能兩種實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)前端列表多條件查詢/搜索功能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript實(shí)現(xiàn)Sleep函數(shù)的代碼
大家知道,JavaScript中沒(méi)有內(nèi)置我們常用的sleep()函數(shù),只有定時(shí)器setTimeout()和循環(huán)定時(shí)器setInterval()2007-03-03
理解JavaScript設(shè)計(jì)模式中的建造者模式
這篇文章主要介紹了理解JavaScript設(shè)計(jì)模式中的建造者模式,文章基于JavaScript的相關(guān)資料展開(kāi)箱子內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-04-04
Typescript學(xué)習(xí)之接口interface舉例詳解
TypeScript是JavaScript的一個(gè)超集,主要提供了類型系統(tǒng)和對(duì)ES6+的支持,TypeScript的核心原則之一是對(duì)值所具有的結(jié)構(gòu)進(jìn)行類型檢查,這篇文章主要給大家介紹了關(guān)于Typescript學(xué)習(xí)之接口interface的相關(guān)資料,需要的朋友可以參考下2024-03-03
JavaScript 保護(hù)變量不被隨意修改的實(shí)現(xiàn)代碼
本文通過(guò)實(shí)例代碼給大家分享JavaScript 保護(hù)變量不被隨意修改的實(shí)現(xiàn)方法,需要的朋友參考下吧2017-09-09
輕松實(shí)現(xiàn)js選項(xiàng)卡切換效果
這篇文章主要幫助大家輕松實(shí)現(xiàn)js選項(xiàng)卡切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09
關(guān)于Iframe父頁(yè)面與子頁(yè)面之間的相互調(diào)用
下面小編就為大家?guī)?lái)一篇關(guān)于Iframe父頁(yè)面與子頁(yè)面之間的相互調(diào)用。小編覺(jué)得挺不錯(cuò)的,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧,祝大家游戲愉快哦2016-11-11
js中的時(shí)間轉(zhuǎn)換—毫秒轉(zhuǎn)換成日期時(shí)間的示例代碼
本篇文章主要是對(duì)js中的時(shí)間轉(zhuǎn)換—毫秒轉(zhuǎn)換成日期時(shí)間的示例代碼進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01
JS實(shí)現(xiàn)的自定義顯示加載等待圖片插件(loading.gif)
這篇文章主要介紹了JS實(shí)現(xiàn)的自定義顯示加載等待圖片插件,涉及javascript針對(duì)圖片的動(dòng)態(tài)加載實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
JS實(shí)現(xiàn)圖片平面旋轉(zhuǎn)的方法
這篇文章主要介紹了JS實(shí)現(xiàn)圖片平面旋轉(zhuǎn)的方法,涉及JavaScript操作頁(yè)面元素樣式動(dòng)態(tài)變換的相關(guān)技巧,需要的朋友可以參考下2016-03-03

