日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

JS實現(xiàn)數(shù)組過濾從簡單到多條件篩選

瀏覽:185日期:2024-03-22 10:46:10
目錄單條件單數(shù)據(jù)篩選單條件多數(shù)據(jù)篩選多條件單數(shù)據(jù)篩選多條件多數(shù)據(jù)篩選知識點1: Object.key() 獲取數(shù)組索引或者對象屬性知識點2: js里的falsy知識點3: Array.every 與 Array.some的區(qū)別知識點4: 數(shù)組的深拷貝與淺拷貝想一想:遞歸算法的優(yōu)化

在上家公司工作的時候,有一個需求是在前端部分完成篩選功能,一次拿到所有數(shù)據(jù),然后根據(jù)條件篩選。通常情況下篩選是后臺給接口,在數(shù)據(jù)量不大的情況下,也有人可能會遇到前端篩選這樣的情況,特別寫了這篇文章分享給大家,有問題請指出,互相學習。

一般情況下的單條件篩選,數(shù)組的filter方法就能夠滿足需求,本文討論的重點是多條件下的復合篩選,并列出了幾個相關(guān)知識點。

以下是很多個🌰🌰🌰🌰

// 這個是例子中的被篩選數(shù)組var aim = [ {name:’Anne’, age: 23, gender:’female’}, {name:’Leila’, age: 16, gender:’female’}, {name:’Jay’, age: 19, gender:’male’}, {name:’Mark’, age: 40, gender:’male’}]單條件單數(shù)據(jù)篩選

根據(jù)單個名字篩選,用filter方法,判斷name是否為目標名字即可

// 根據(jù)單個名字篩選function filterByName(aim, name) { return aim.filter(item => item.name == name)}// 輸入 aim ’Leila’ 期望輸出為 [{name:’Leila’, age: 16, gender:’female’}]console.log(filterByName(aim,’leila’))單條件多數(shù)據(jù)篩選

根據(jù)多個名字篩選,這里是用for循環(huán)遍歷目標數(shù)組,然后用find方法找到后push到結(jié)果數(shù)組里,用find方法是重名情況下也能得到想要的結(jié)果。for循環(huán)可以用數(shù)組的一些遍歷方法替代,代碼可以更簡化,示例就是大概表達個意思。

// 根據(jù)多個名字篩選function filterByName1(aim, nameArr) { let result = [] for(let i = 0; i < nameArr.length; i++) {result.push(aim.find(item => item.name = nameArr[i])) } return result}// 輸入 aim [’Anne’,’Jay’] //期望輸出為 [{name:’Anne’, age: 23, gender:’female’},{name:’Jay’, age: 19, gender:’male’}]console.log(filterByName1(aim,[’Leila’,’Jay’]))// 有BUG 改進后多條件單數(shù)據(jù)篩選

根據(jù)單個名字或者單個年齡篩選,用filter方法,判斷條件之間是或的關(guān)系。

// 根據(jù)名字或者年齡篩選function filterByName2(aim, name, age) { return aim.filter(item => item.name == name || item.age == age)}console.log(filterByName2(aim,’Leila’,19))多條件多數(shù)據(jù)篩選

我最初是用了很笨的雙for循環(huán)去做,發(fā)現(xiàn)很慢,而且并沒有達到預期的效果。具體的心路歷程已經(jīng)太遙遠,簡單介紹以下這個篩選算法。首先是把篩選條件都塞到一個對象里,用object對象的keys方法獲取到篩選的條件名,及需要篩選的是哪個條件,是name?age? gender?然后使用filter方法對目標數(shù)據(jù)進行篩選,🌰如下⬇️根據(jù)名字和年齡多元素篩選

//根據(jù)名字和年齡多元素篩選export function multiFilter(array, filters) { const filterKeys = Object.keys(filters) // filters all elements passing the criteria return array.filter((item) => { // dynamically validate all filter criteria return filterKeys.every(key => {//ignore when the filter is empty Anne if(!filters[key].length) return true return !!~filters[key].indexOf(item[key]) }) })}/* * 這段代碼并非我原創(chuàng),感興趣的可以去原作者那里點個贊 * 作者是:@author https://gist.github.com/jherax * 這段代碼里我只加了一行,解決部分篩選條件清空時候整體篩選失效的問題 */var filters = { name:[’Leila’, ’Jay’], age:[]}/* 結(jié)果: * [{name: 'Leila', age: 16, gender: 'female'}, * {name: 'Jay', age: 19, gender: 'male'}] */

例如這里,判斷每條數(shù)據(jù)的name值是否在filters.name數(shù)組里,是的話返回true,判斷filters.age是空數(shù)組的話直接返回true,空數(shù)組是模擬了age條件被清空的情況,我們?nèi)匀荒艿玫秸_的篩選數(shù)據(jù)。

知識點1: Object.key() 獲取數(shù)組索引或者對象屬性

var arr = [’a’, ’b’, ’c’];console.log(Object.keys(arr)); // ['0', '1', '2']var obj = { 0: ’a’, 1: ’b’, 2: ’c’ };console.log(Object.keys(obj)); // ['0', '1', '2']var anObj = { 100: ’a’, 2: ’b’, 7: ’c’ };console.log(Object.keys(anObj)); // ['2', '7', '100'] 猜猜為啥?知識點2: js里的falsy

falsy : 0 , false, '', null, undefined, NaN

在判斷語句中,只有上面6種情況會是false,其余的都是true

var a;if(a!=null&&typeof(a)!=undefined&&a!=’’){ //a有內(nèi)容才執(zhí)行的代碼 }if(!!a){ //a有內(nèi)容才執(zhí)行的代碼... }知識點3: Array.every 與 Array.some的區(qū)別

我的理解是在遍歷數(shù)組的時候:

Array.every的條件是「與」的關(guān)系,全真為真,及條件全為true則為true,有一個false就返回false Array.some的條件是「或」的關(guān)系,有真為真,條件有一個true就返回true,條件全為false的時候才返回false

下面舉個🌰

// 判斷每個名字都為Anne?let dataEvery = aim.every(item => item.name === ’Anne’) // falselet dataEvery = aim.some(item => item.name === ’Anne’) // true// 判斷每個名字都是字符串?let dataEvery = aim.every(item => typeof item.name === ’string’) // truelet dataEvery = aim.some(item => typeof item.name === ’string’) // true知識點4: 數(shù)組的深拷貝與淺拷貝

最近參與一些前端的面試工作,深拷貝與淺拷貝是我最愛問的問題之一。一個問題就考察了數(shù)據(jù)類型,數(shù)組操作,遞歸算法等。

因為數(shù)組是js里的引用類型,單純復制時復制的是其引用關(guān)系。在對獲取的數(shù)據(jù)進行篩選時,我并不希望影響原始數(shù)據(jù),所以我要用到「深拷貝」得到與原始數(shù)據(jù)數(shù)據(jù)結(jié)構(gòu)完全相同又相互獨立的數(shù)據(jù),而不是只復制其引用關(guān)系。

// 我常用方法,如果項目很大,不推薦let obj1 = JSON.parse(JSON.stringify(obj))// deepclonefunction deepClone(o1, o2) { for (let k in o2) {if (typeof o2[k] === ’object’) { o1[k] = {}; deepClone(o1[k], o2[k]);} else { o1[k] = o2[k];} }}想一想:遞歸算法的優(yōu)化

這個知識點與本文關(guān)系不大。😄 抱歉之前的誤導。

這個是看掘金小冊前端面試指南看到的,講算法的時候提了一下遞歸算法的優(yōu)化,初見的時候又被驚艷到,還沒有在項目里用到。感興趣的可以試試,這個是斐波那契數(shù)列和。可以自己在瀏覽器里敲一下,試試不用緩存與用緩存的運算次數(shù)差別。

let count = 0;function fn(n) { let cache = {}; function _fn(n) {if (cache[n]) { return cache[n];}count++;if (n == 1 || n == 2) { return 1;}let prev = _fn(n - 1);cache[n - 1] = prev;let next = _fn(n - 2);cache[n - 2] = next;return prev + next; } return _fn(n);}let count2 = 0;function fn2(n) { count2++; if (n == 1 || n == 2) {return 1; } return fn2(n - 1) + fn2(n - 2);}

到此這篇關(guān)于JS實現(xiàn)數(shù)組過濾從簡單到多條件篩選的文章就介紹到這了,更多相關(guān)JS 數(shù)組過濾內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
水蜜桃精品av一区二区| 亚洲另类视频| 亚洲日本欧美| 日韩国产欧美在线视频| 日韩精品一区二区三区中文| 亚洲a成人v| 日本精品久久| 91精品国产自产观看在线| 国产欧美亚洲一区| 国产精品www.| 国产中文在线播放| 欧美成人基地 | 蜜臀91精品一区二区三区| 亚洲国产成人精品女人| 亚洲欧美不卡| 亚洲aa在线| 免费在线亚洲欧美| 亚洲va中文在线播放免费| 亚洲涩涩在线| 伊人久久婷婷| 涩涩涩久久久成人精品| 国产美女亚洲精品7777| 欧美国产小视频| 天堂日韩电影| 亚洲永久精品唐人导航网址| 91大神在线观看线路一区| 国产精品久久久久久妇女| xxxxx性欧美特大| 欧美粗暴jizz性欧美20| 深夜日韩欧美| 精品国产欧美| 欧美成人亚洲| 午夜精品影视国产一区在线麻豆| 欧美专区一区| 亚洲1234区| 少妇精品久久久一区二区| 久久精品国产999大香线蕉| | 在线一区二区三区视频| 97se亚洲| 日韩欧美视频专区| 日本欧美在线看| 另类欧美日韩国产在线| 亚洲精品一二三区区别| 欧美日本一区| 99久久夜色精品国产亚洲狼 | 国产精品视区| 精品国产三区在线| 美女国产一区| 国产一区2区| 亚洲欧美激情诱惑| 麻豆精品久久久| 亚洲男女自偷自拍| 精品视频高潮| 蜜臀av一区二区在线免费观看| 精品国产不卡| 丝袜美腿亚洲色图| 四虎国产精品免费观看| 最新国产精品视频| 综合日韩av| 日韩高清在线不卡| 91精品国产福利在线观看麻豆| 亚洲精品一区二区在线播放∴| 色一区二区三区| 欧美日韩一区二区三区四区在线观看| 欧美gv在线| 国产精品亚洲综合色区韩国| 一区免费视频| 国产va在线视频| 日韩高清欧美激情| 欧美在线亚洲综合一区| 久久亚洲人体| 日本午夜精品一区二区三区电影 | 欧美日本三区| 亚洲欧美高清| 伊人精品一区| 中文字幕在线高清| 国产日韩精品视频一区二区三区| 欧美日韩国产在线一区| 国产91在线播放精品| 97精品国产99久久久久久免费| 99在线观看免费视频精品观看| 一区二区三区四区日本视频| 久久av中文| 久久精品97| 亚洲另类视频| 亚洲综合不卡| 亚洲国内欧美| 黑人精品一区| 精品视频免费| 国产精品日韩精品中文字幕| 日本成人在线视频网站| 国产美女精品| 国产精品av一区二区| 日韩欧美综合| 国产一区2区| 免费亚洲婷婷| 国产精品一区三区在线观看| 日本成人一区二区| 中文一区一区三区免费在线观 | 国产一区二区三区四区大秀 | 欧美日韩国产高清| 欧美~级网站不卡| 国产99久久| 天堂√中文最新版在线| 成人污污视频| 国产不卡人人| 亚洲伦乱视频| 91精品韩国| 久久美女性网| 美女尤物国产一区| 国产极品嫩模在线观看91精品| 国产精品一区二区中文字幕| 国产日产高清欧美一区二区三区| 日韩久久99| 亚洲免费一区三区| 日韩欧美美女在线观看| 日韩精品三级| 国产精品永久| 免费日韩成人| 精品一区二区三区免费看| 精品三级av在线导航| 狠狠久久伊人| 电影91久久久| 日本美女一区| 国产精品yjizz视频网| 欧美日韩国产v| 在线精品视频在线观看高清| 国产精品社区| 日韩精品欧美大片| 久久国产麻豆精品| 久久精品一本| 日韩中文影院| 自拍日韩欧美| 亚州av一区| 国产精品一区高清| 国产精品99一区二区三区| 五月天av在线| 悠悠资源网久久精品| 中文字幕一区二区三区日韩精品| 免费观看在线色综合| 日本a级不卡| 精品久久精品| 免费视频国产一区| 在线精品国产亚洲| 久久99精品久久久野外观看| 中文字幕在线官网| 亚洲美洲欧洲综合国产一区| 亚洲欧美网站在线观看| 国产精选久久| 欧美13videosex性极品| 国产亚洲网站| 欧美一区精品| xxxxx性欧美特大| 视频一区在线播放| 欧美日一区二区在线观看| 国产精品99视频| 亚洲免费黄色| 欧美日韩精品一区二区三区在线观看| 国产一区二区三区不卡视频网站| 波多野结衣一区| 国产欧美自拍一区| 欧美成人基地 | 只有精品亚洲| 麻豆国产精品| 亚洲激情不卡| 国产精品主播在线观看| 三级精品视频| 四虎国产精品免费久久| 精品视频97| 亚洲欧美不卡| 久久精品国产网站| 免费不卡中文字幕在线| 日本va欧美va精品发布| 日韩大片免费观看| 免费看欧美美女黄的网站| 麻豆精品视频在线| 亚洲精品va| 久久69成人| 亚洲影院天堂中文av色| 日韩理论视频| 911亚洲精品| 日韩精品一区二区三区免费观看| 天堂av一区| 激情婷婷久久| 欧美激情在线精品一区二区三区| 婷婷激情综合| 久久99精品久久久野外观看| 亚洲一区欧美二区| 国产aⅴ精品一区二区四区| 亚洲欧美网站| 中国字幕a在线看韩国电影| 日本成人一区二区| 五月婷婷亚洲| 精品91福利视频| 日韩精品一区二区三区中文 | 一区二区三区四区日韩| 久久久久欧美精品| 欧美激情福利| 日本成人一区二区|