JavaScript數(shù)據(jù)分析之交集,并集,對(duì)稱差集
數(shù)據(jù)結(jié)構(gòu)是待處理問題的數(shù)學(xué)模型,算法則是處理問題的策略。
作為軟件工程師除了要對(duì)現(xiàn)實(shí)問題有很好的理解與把控外,還要深諳數(shù)據(jù)結(jié)構(gòu)與算法才能找到合適的數(shù)學(xué)模型和算法,從而服務(wù)于后續(xù)的工作。由此數(shù)據(jù)結(jié)構(gòu)與算法的重要性可見一斑。
列表交集
代碼注釋:
/** * @description 兩個(gè)列表的交集 * @param {Array} a 列表源數(shù)據(jù) * @param {Array} b 列表源數(shù)據(jù) * @return {Array} 目標(biāo)數(shù)據(jù) * @example * * const a = [ * { id: 1, name: '張三' }, * { id: 2, name: '李四' }, * { id: 3, name: '王五' }, * ] * const b = [ * { id: 1, name: '張三' }, * { id: 4, name: '牛二' }, * { id: 5, name: '趙六' }, * ] * * intersection(a, b, 'id') * * [ * { id: 1, name: '張三' } * ] */
方法封裝:
export const intersection = (a, b, key = null) => { return a.filter(i => (key ? b.map(i => i[key]).includes(i[key]) : b.includes(i))) }
列表并集
代碼注釋:
/** * @description 兩個(gè)列表的并集 * @param {Array} a 列表源數(shù)據(jù) * @param {Array} b 列表源數(shù)據(jù) * @return {Array} 目標(biāo)數(shù)據(jù) * @example * * const a = [ * { id: 1, name: '張三' }, * { id: 2, name: '李四' }, * { id: 3, name: '王五' }, * ] * const b = [ * { id: 1, name: '張三' }, * { id: 4, name: '牛二' }, * { id: 5, name: '趙六' }, * ] * * union(a, b, 'id') * * [ * { id: 1, name: '張三' }, * { id: 2, name: '李四' }, * { id: 3, name: '王五' }, * { id: 4, name: '牛二' }, * { id: 5, name: '趙六' }, * ] */
方法封裝:
export const union = (a, b, key = null) => { return [...a, ...b.filter(i => (key ? !a.map(i => i[key]).includes(i[key]) : !a.includes(i)))] }
列表對(duì)稱差集
代碼注釋:
/** * @description 兩個(gè)列表的對(duì)稱差集 * @param {Array} a 列表源數(shù)據(jù) * @param {Array} b 列表源數(shù)據(jù) * @return {Array} 目標(biāo)數(shù)據(jù) * @example * * const a = [ * { id: 1, name: '張三' }, * { id: 2, name: '李四' }, * { id: 3, name: '王五' }, * ] * const b = [ * { id: 1, name: '張三' }, * { id: 4, name: '牛二' }, * { id: 5, name: '趙六' }, * ] * * difference(a, b, 'id') * * [ * { id: 2, name: '李四' }, * { id: 3, name: '王五' }, * { id: 4, name: '牛二' }, * { id: 5, name: '趙六' }, * ] */
方法封裝:
export const difference = (a, b, key = null) => { return [...a, ...b].filter(i => ![a, b].every(g => (key ? g.map(i => i[key]).includes(i[key]) : g.includes(i)))) }
到此這篇關(guān)于JavaScript數(shù)據(jù)分析之交集,并集,對(duì)稱差集的文章就介紹到這了,更多相關(guān)JS交集,并集,對(duì)稱差集內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript數(shù)組中的concat方法和splice方法
這篇文章主要介紹了javascript數(shù)組中的concat方法和splice方法,concat方法作用合并數(shù)組,可以合并一個(gè)或多個(gè)數(shù)組,會(huì)返回合并數(shù)組之后的數(shù)據(jù),不會(huì)改變?cè)瓉淼臄?shù)組,更多相關(guān)內(nèi)容需要的小伙伴可以參考下面文章內(nèi)容2022-03-03JavaScript表單通過正則表達(dá)式驗(yàn)證電話號(hào)碼
通過正則表達(dá)式實(shí)現(xiàn)判斷一個(gè)輸入量是否為電話號(hào)碼,需要的朋友可以參考下2014-03-03javascript判斷兩個(gè)IP地址是否在同一個(gè)網(wǎng)段的實(shí)現(xiàn)思路
要判斷兩個(gè)IP地址是否在同一個(gè)網(wǎng)段,將它們的IP地址分別與子網(wǎng)掩碼做與運(yùn)算,得到的結(jié)果為網(wǎng)絡(luò)號(hào),具體實(shí)現(xiàn)如下,需要的朋友可以參考下2013-12-12js實(shí)現(xiàn)遍歷含有input的table實(shí)例
這篇文章主要介紹了js實(shí)現(xiàn)遍歷含有input的table方法,結(jié)合實(shí)例形式分析了jsp讀取數(shù)據(jù)庫(kù)動(dòng)態(tài)生成table及JavaScript遍歷table的相關(guān)技巧,需要的朋友可以參考下2015-12-12利用CSS、JavaScript及Ajax實(shí)現(xiàn)圖片預(yù)加載的方法
預(yù)加載圖片是提高用戶體驗(yàn)的一個(gè)很好方法,實(shí)現(xiàn)圖片預(yù)加載可以使用css、JavaScript、Ajax三種方法。下面逐一給大家介紹利用CSS、JavaScript及Ajax實(shí)現(xiàn)圖片預(yù)加載的方法,需要的朋友參考下吧2016-11-11Javascript中toFixed計(jì)算錯(cuò)誤(依賴銀行家舍入法的缺陷)解決方法
這篇文章主要介紹了Javascript中toFixed計(jì)算錯(cuò)誤(依賴銀行家舍入法的缺陷)解決方法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-08-08判斷JavaScript對(duì)象是否可用的最正確方法分析
在調(diào)試JavaScript的過程中,你是不是經(jīng)常會(huì)遇到object undefined的問題呢?你平時(shí)是怎樣來測(cè)試對(duì)象是否存在呢?判斷瀏覽器版本?判斷JavaScript版本?本文來告訴你正確的方法。這篇文章涉及的瀏覽器可能古老一些,但是闡述的道理確實(shí)適合現(xiàn)在使用的。2008-10-10