18個項目必備的JavaScript代碼片段——數組篇

大家好,我是若川。最近組織了源碼共讀活動,感興趣的可以加我微信?ruochuan12?參與,目前近3000人參與,0-5年工作經驗的都可以參與學習。

1.chunk轉換二維數組

將數組(array)拆分成多個數組,并將這些拆分的多個數組組成一個新數組。

function?chunk(array,?count?=?1)?{let?pages?=?[]array.forEach((item,?index)?=>?{const?page?=?Math.floor(index?/?count)if?(!pages[page])?pages[page]?=?[]pages[page].push(item)})return?pages
}

小栗子

chunk([1,?2,?3,?4,?5,?6,?7],?2)
=>?[[1,?2],?[3,?4],?[5,?6],?[7]]chunk(['a',?'b',?'c',?'d'],?3)
=>?[['a',?'b',?'c'],?['d']]

2.cloneArray克隆數組

淺拷貝一份數組副本。

//?ES6?...
const?cloneArray?=?arr?=>?[...arr]//?ES6?Array.from
const?cloneArray?=?arr?=>?Array.from(arr)//?concat()
const?cloneArray?=?arr?=>?[].concat(arr)//?map()
const?cloneArray?=?arr?=>?arr.map(x?=>?x)cloneArray([1,?24])?//?[1,?24]

小栗子

cloneArray([1,?24])
//?=>?[1,?24]

3.compact去除數組中的無效值

創建一個新數組,包含原數組中所有的非假值元素。例如false, null,0, "", undefined, 和 NaN 都是被認為是“假值”。

const?compact?=?arr?=>?arr.filter(Boolean)

小栗子

min([0,?1,?false,?2,?'',?3])
//?=>?[1,?2,?3]

4.difference 數組差集

創建一個具有唯一array值的數組,每個值不包含在其他給定的數組中。

假設有 AB 兩個數組,返回 A 數組中的集合不包含 B 數組中的集合。

const?difference?=?(a,?b)?=>?{const?s?=?new?Set(b)let?arr?=?a.filter(x?=>?!s.has(x))return?arr
}

小栗子

difference([1,?2,?6,?7],?[1,?2,?9,?5])
//?=>?[?6,?7?]

5.intersection數組集合

創建一個共有的array值的數組,每個值包含在其他給定的數組中。

const?intersection?=?(a,?b)?=>?{const?s?=?new?Set(b)return?a.filter(x?=>?s.has(x))
}
//?ES6?includes
const?intersection?=?(arr,?values)?=>?arr.filter(v?=>?values.includes(v))

小栗子

intersection([1,?2,?6,?7],?[1,?2,?9,?5])
//?=>?[?1,?2?]

6.flatten扁平化數組

將多層嵌套數組(array)拆分成一個數組。

//?扁平化??Map?方法
const?flatten?=?arr?=>?[].concat(...arr.map(v?=>?(Array.isArray(v)???flatten(v)?:?v)))//?扁平化??reduce?方法
const?flatten?=?arr?=>?arr.reduce((a,?c)?=>?a.concat(Array.isArray(c)???flatten(c)?:?c),?[])

小栗子

flatten([1,?[2],?[3],?[4,?5]])=>?[1,?2,?3,?4,?5]

7.flattenDeep指定層級扁平化數組

將多層嵌套數組(array)拆分成指定層級數組。

const?flattenDeep?=?(arr,?depth?=?1)?=>?arr.reduce((a,?v)?=>?a.concat(depth?>?1?&&?Array.isArray(v)???flatten(v,?depth?-?1)?:?v),?[])//?ES6方法?`flat(depth)`
[1,?[2,?[3,?[4]],?5]].flat(1)
//?=>?[1,?2,?[3,?[4]],?5]

小栗子

flattenDeep([1,?[2,?[3,?[4]],?5]],?1)
//?=>?[1,?2,?[3,?[4]],?5]

8.isArrayEqual檢查兩個數組各項相等

比較兩個數組內的各項值是否相等,返回一個Boolean值。

const?isArrayEqual?=?(a,?b,?has?=?true)?=>?{if?(a.length?!==?b.length)?return?(has?=?false)const?s?=?new?Set(b)if?(a.find(x?=>?!s.has(x)))?return?(has?=?false)return?has
}

小栗子

isArrayEqual([6,?5,?2,?4,?1,?3],?[1,?2,?3,?4,?5,?6])
//?=>?trueisArrayEqual([6,?5,?2,?7,?1,?3],?[1,?2,?3,?4,?5,?6])
//?=>?false

9.max數組中最大值

過濾原數組中所有的非假值元素,返回數組中的最大值。

const?max?=?arr?=>?Math.max(...arr.filter(v?=>?Boolean(v)?||?v?===?0))

小栗子

max([0,?-1,?-2,?-3,?false])
//?=>?0

10.min數組中最小值

過濾原數組中所有的非假值元素,返回數組中的最小值

const?min?=?arr?=>?Math.min(...arr.filter(v?=>?Boolean(v)?||?v?===?0))

小栗子

min([0,?-1,?-2,?-3,?false])
//?=>?-3

11.shuffle打亂數組

創建一個打亂的數組,使用Fisher-Yates算法打亂數組的元素。

const?shuffle?=?([...arr])?=>?{let?m?=?arr.lengthwhile?(m)?{const?i?=?Math.floor(Math.random()?*?m--);[arr[m],?arr[i]]?=?[arr[i],?arr[m]]}return?arr
}

小栗子

shuffle([2,?3,?1])
//?=>?[3,?1,?2]

12.sortAsc數組升序

返回升序后的新數組

sort()方法會改變原數組,默認按 unicode 碼順序排列

//?通過ES6?...展開運算符淺拷貝一份新數組
const?sortAsc?=?arr?=>?[...arr].sort((a,?b)?=>?a?-?b)

小栗子

sortAsc([3,?2,?3,?4,?1])
//?=>?[?1,?2,?3,?3,?4?]

13.sortDesc數組降序

返回降序后的新數組。

const?sortDesc?=?arr?=>?[...arr].sort((a,?b)?=>?b?-?a)

小栗子

sortDesc([3,?2,?3,?4,?1])
//?=>?[?1,?2,?3,?3,?4?]

14.take截取數組開始指定的元素

從 array 數組的最開始一個元素開始提取 n 個元素。

const?take?=?(arr,?n?=?1)?=>?arr.slice(0,?n)

小栗子

take([2,?3,?1],?2)
//?=>?[2,?3]

15.takeLast截取數組末尾元素

從 array 數組的最后一個元素開始提取 n 個元素

const?takeLast?=?(arr,?n?=?1)?=>?arr.slice(0,?-n)

小栗子

take([2,?3,?1],?2)
//?=>?[3,?1]

16.treeData生成樹結構數據

該函數傳入一個數組, 每項id對應其父級數據parent_id,返回一個樹結構數組

const?treeData?=?(arr,?id?=?null,?link?=?'parent_id')?=>?arr.filter(item?=>?item[link]?===?id).map(item?=>?({?...item,?children:?treeData(arr,?item.id)?}))

參數

  • array 要生成樹結構的數組

  • id 自定義屬性名

  • parent_id 父級自定義屬性名

小栗子

const?comments?=?[{?id:?1,?parent_id:?null?},{?id:?2,?parent_id:?1?},{?id:?3,?parent_id:?1?},{?id:?4,?parent_id:?2?},{?id:?5,?parent_id:?4?},
]treeData(comments)//?=>?[?{?id:?1,?parent_id:?null,?children:?[?[Object],?[Object]?]?}?]

17.unique數組去重

創建一個去重后的 array 數組副本。

const?unique?=?(...arr)?=>?[...new?Set(arr)]//?const?unique?=?(...arr)?=>?Array.from(new?Set(arr))

小栗子

unique([1,?2,?2,?3,?4,?4,?5])
//?=>?[?1,?2,?3,?4,?5?]

18.uniqueBy數組對象去重

創建一個去重后的 array 數組對象副本。

const?uniqueBy?=?(arr,?key)?=>?{return?arr.reduce((acc,?cur)?=>?{const?ids?=?acc.map(item?=>?item[key])return?ids.includes(cur[key])???acc?:?[...acc,?cur]},?[])
}

參數

  • array 要去重的數組

  • key 要去重的對象屬性值

小栗子

const?responseList?=?[{?id:?1,?a:?1?},{?id:?2,?a:?2?},{?id:?3,?a:?3?},{?id:?1,?a:?4?},{?id:?2,?a:?2?},{?id:?3,?a:?3?},{?id:?1,?a:?4?},{?id:?2,?a:?2?},{?id:?3,?a:?3?},{?id:?1,?a:?4?},{?id:?2,?a:?2?},{?id:?3,?a:?3?},{?id:?1,?a:?4?},
]uniqueBy(responseList,?'id')//?=>?[?{?id:?1,?a:?1?},?{?id:?2,?a:?2?},?{?id:?3,?a:?3?}?]

最近組建了一個湖南人的前端交流群,如果你是湖南人可以加我微信?ruochuan12?私信 湖南 拉你進群。

推薦閱讀

1個月,200+人,一起讀了4周源碼
我歷時3年才寫了10余篇源碼文章,但收獲了100w+閱讀

老姚淺談:怎么學JavaScript?

我在阿里招前端,該怎么幫你(可進面試群)

7f912bfb428a3fdc950710d7693977e9.gif

·················?若川簡介?·················

你好,我是若川,畢業于江西高校。現在是一名前端開發“工程師”。寫有《學習源碼整體架構系列》10余篇,在知乎、掘金收獲超百萬閱讀。
從2014年起,每年都會寫一篇年度總結,已經寫了7篇,點擊查看年度總結。
同時,最近組織了源碼共讀活動,幫助1000+前端人學會看源碼。公眾號愿景:幫助5年內前端人走向前列。

7ba62de75a883f17740106f0cecfbfc6.png

識別方二維碼加我微信、拉你進源碼共讀

今日話題

略。分享、收藏、點贊、在看我的文章就是對我最大的支持~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275207.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275207.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275207.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

美學評價_卡美學的真正美

美學評價In collectible card games like Hearthstone, Legends of Runeterra, and Magic: The Gathering, the aesthetic of the cards is indubitably one of the greatest highlights for many, if not all players. Although the game loop is reliant on physically build…

好程序員web前端分享CSS Bug、CSS Hack和Filter學習筆記

為什么80%的碼農都做不了架構師?>>> CSS Bug、CSS Hack和Filter學習筆記 1)CSS Bug:CSS樣式在各瀏覽器中解析不一致的情況,或者說CSS樣式在瀏覽器中不能正確顯示的問題稱為CSS bug. 2)CSS Hack: CSS中,Hack是指一種兼容CSS在不同…

as3 淺復制 深復制

基元數據類型:boolean、int、uint、number、string 兩種復雜數據類型:array、object 當數組元素全部是基元數據類型時,即全部是值類型時,是沒有淺復制和深復制的區別。 當數組元素全部是復雜數據類型,即引用類型時&…

碎片化學前端,促進技術提升,我推薦這些

大家好,我是若川。眾所周知,關注公眾號可以了解學習掌握技術方向,學習優質好文,落實到自己項目中。還可以結交圈內好友,讓自己融入到積極上進的技術氛圍,促進自己的技術提升。話不多說,推薦這些…

ux和ui_設計更好的結帳體驗-UX / UI案例研究

ux和uiPlated Cuisine is a food ordering and delivery app for Plated Cuisine Restaurant founded and managed by Rayo Odusanya.Plated Cuisine是由Rayo Odusanya創建和管理的Plated Cuisine Restaurant的食品訂購和交付應用程序。 A short background about Rayo Rayo O…

Django中ajax發送post請求,報403錯誤CSRF驗證失敗解決辦法

今天學習Django框架,用ajax向后臺發送post請求,直接報了403錯誤,說CSRF驗證失敗;先前用模板的話都是在里面加一個 {% csrf_token %} 就直接搞定了CSRF的問題了;很顯然,用ajax發送post請求這樣就白搭了&…

如何在EXCEL中添加下拉框

篩選主要是將已有列的信息以下拉框的形式顯示出來 選中數據欄中的篩選按鈕即可生成 如果是想添加未有信息則如下圖步驟 首先,選擇你要出現下拉的區域,在數據欄中的選擇數據有效性 然后,下面對話框中,有效性條件中按如下設置即可&a…

每次新增頁面復制粘貼?100多行源碼的 element-ui 的新增組件功能教你解愁

1. 前言大家好,我是若川。最近組織了源碼共讀活動,感興趣的可以點此加我微信ruochuan12 參與,每周大家一起學習200行左右的源碼,共同進步。已進行三個月了,很多小伙伴表示收獲頗豐。想學源碼,極力推薦之前我…

原子設計_您需要了解的有關原子設計的4件事

原子設計重點 (Top highlight)Industries such as Architecture or Industrial Design have developed smart modular systems for manufacturing extremely complex objects like airplanes, ships, and skyscrapers. Inspired by this, Atomic Design was proposed as a syst…

深度學習 Caffe 初始化流程理解(數據流建立)

之前在簡書的文章,搬遷過來 ^-^ 本文是作者原創,如有理解錯誤,懇請大家指出,如需引用,請注明出處。 #Caffe FeatureMap數據流的建立 ##用語解釋 FeatureMap: 輸入的圖片信息或者經過多層處理后的圖片信息。weights: 只…

C#中的Clipboard與ContextMenuStrip應用舉例

今天,突然想起了怎樣在一個文本中實現復制、剪切與粘貼的功能,并給這些功能添加右鍵的快捷方式。于是,就用自己的VS2008寫了一個簡單的小應用,以熟悉C#中剪貼板與快捷菜單的使用。 首先,我們不難發現,剪貼板…

控制臺ui_設計下一代控制臺UI

控制臺ui游戲UX (GAMES UX) Yesterday’s Sony presentation showed us the final look of the PlayStation 5, as well as an impressive of next-gen games that will be released with it. What we didn’t get to see, however, is the new operating system and it’s use…

寫給前端新手看的一些模塊化知識

大家好,我是若川。最近組織了源碼共讀活動,感興趣的可以點此加我微信ruochuan12 進群參與,每周大家一起學習200行左右的源碼,共同進步。已進行三個月了,很多小伙伴表示收獲頗豐。一、 為什么需要模塊化以前沒有模塊化時…

重學前端學習筆記(八)--JavaScript中的原型和類

筆記說明 重學前端是程劭非(winter)【前手機淘寶前端負責人】在極客時間開的一個專欄,每天10分鐘,重構你的前端知識體系,筆者主要整理學習過程的一些要點筆記以及感悟,完整的可以加入winter的專欄學習【原文…

代碼實現照片素描_我的代碼素描之旅

代碼實現照片素描In 2018 I started the process of consistently creating and posting my code sketches online. These are small animations I make with code and post on instagram. Through these sketches I tried to visually express my ideas using color, animatio…

GCC參數詳解

轉自:http://www.cnblogs.com/fence/archive/2009/12/18/1627138.html GCC參數詳解 gcc and g分別是gnu的c & c編譯器 gcc/g在執行編譯工作的時候,總共需要4步1.預處理,生成.i的文件[預處理器cpp]2.將預處理后的文件不轉換成匯編語言,生成文件.s[編…

真效率神器,UI稿智能轉換成前端代碼,準確率極高

大家好,我是若川。在這充滿網絡促銷活動的幾個月,倍感壓力的,除了你的口袋,是否還有程序員的發量呢?每年的雙十一、雙十二購物狂歡節,各大電商平臺都會上線讓消費者充滿購買欲望的活動頁面,而這…

PPT圖標的正確使用和插入與編輯形狀

PPT圖標的正確使用和插入與編輯形狀 通過圖標可以以符號的形式直觀地傳遞信息。 一,實戰:在銷售工作計劃中插入圖標 PowerPoint 2016中提供了多種類型的圖標,用戶可根據需要在幻燈片中插入所需的圖標。 二,實戰:更改銷…

幾個用于序列化的代碼片段

參考JavaScriptSerializer,一般用來做JSON格式化http://msdn.microsoft.com/zh-cn/library/system.web.script.serialization.javascriptserializer.aspx http://msdn.microsoft.com/zh-cn/library/system.web.script.serialization.javascriptconverter.aspxDataContractSeria…

桌面圖標擺放圖案_用圖標制作醒目的圖案

桌面圖標擺放圖案Level up your video calls with a custom backdrop created using Noun Project icons.使用使用Noun Project圖標創建的自定義背景來升級視頻通話。 The only thing more visually pleasing than a well-designed icon is a neat, eye-catching pattern made…