摘要:文檔地址中文文檔英文文檔源碼地址將數(shù)組拆分成多個(gè)長度的區(qū)塊,并將這些區(qū)塊組成一個(gè)新數(shù)組。如果無法被分割成全部等長的區(qū)塊,那么最后剩余的元素將組成一個(gè)區(qū)塊。
百忙之中(閑來無事)想抽點(diǎn)時(shí)間好好讀一下源碼,于是就選了Lodash來寫一個(gè)系列罷。讀源碼順序就按照loadsh文檔順序來。
文檔地址:中文文檔?? 英文文檔
源碼地址:gayhub
_.chunk(array, [size=1])
將數(shù)組array拆分成多個(gè) size 長度的區(qū)塊,并將這些區(qū)塊組成一個(gè)新數(shù)組。 如果array 無法被分割成全部等長的區(qū)塊,那么最后剩余的元素將組成一個(gè)區(qū)塊。
例:
chunk(["a", "b", "c", "d"], 2) // => [["a", "b"], ["c", "d"]] chunk(["a", "b", "c", "d"], 3) // => [["a", "b", "c"], ["d"]]
很實(shí)用的一個(gè)函數(shù),下面來看下具體實(shí)現(xiàn):
可以看到,chunk依賴了slice.js,具體實(shí)現(xiàn)解析已經(jīng)講過了:傳送門
import slice from "./slice.js"
首先是參數(shù)的驗(yàn)證
size = Math.max(size, 0) const length = array == null ? 0 : array.length if (!length || size < 1) { return [] }
根據(jù)length/size向上取整來確定新的數(shù)組長度,循環(huán)調(diào)用切片函數(shù)slice,最后返回結(jié)果
let index = 0 let resIndex = 0 const result = new Array(Math.ceil(length / size)) while (index < length) { result[resIndex++] = slice(array, index, (index += size)) } return result
最后貼個(gè)源碼:
import slice from "./slice.js" /** * Creates an array of elements split into groups the length of `size`. * If `array` can"t be split evenly, the final chunk will be the remaining * elements. * * @since 3.0.0 * @category Array * @param {Array} array The array to process. * @param {number} [size=1] The length of each chunk * @returns {Array} Returns the new array of chunks. * @example * * chunk(["a", "b", "c", "d"], 2) * // => [["a", "b"], ["c", "d"]] * * chunk(["a", "b", "c", "d"], 3) * // => [["a", "b", "c"], ["d"]] */ function chunk(array, size) { size = Math.max(size, 0) const length = array == null ? 0 : array.length if (!length || size < 1) { return [] } let index = 0 let resIndex = 0 const result = new Array(Math.ceil(length / size)) while (index < length) { result[resIndex++] = slice(array, index, (index += size)) } return result } export default chunk
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/93444.html
摘要:文檔地址中文文檔英文文檔源碼地址第一個(gè)函數(shù)是,不過源碼中依賴了,所以第一篇文章就從開始。這個(gè)函數(shù)的作用就是裁剪數(shù)組,從下標(biāo)開始,到下標(biāo)結(jié)束,但是并不包含,并將結(jié)果作為一個(gè)數(shù)組返回。并且注明了這個(gè)方法用于代替來確保數(shù)組正確返回。 百忙之中(閑來無事)想抽點(diǎn)時(shí)間好好讀一下源碼,于是就選了Lodash來寫一個(gè)系列罷。讀源碼順序就按照loadsh文檔順序來。 文檔地址:中文文檔?? 英文文檔源...
摘要:原文首發(fā)于源碼講解這是我們閱讀源碼的第篇博客,在這篇文章里我們來學(xué)習(xí)一下的方法。好啦,關(guān)于函數(shù)暫時(shí)就先講到這里啦。與惡龍纏斗過久自身亦成為惡龍凝視深淵過久深淵將回以凝視。 原文首發(fā)于Lodash源碼講解 這是我們閱讀Lodash源碼的第2篇博客,在這篇文章里我們來學(xué)習(xí)一下Lodash的chunk方法。 chunk函數(shù)內(nèi)部依賴其他的函數(shù),依賴的函數(shù)如下所示; slice 按照慣例,我們先...
摘要:今天回答了的問題生產(chǎn)嵌套數(shù)組也就是對(duì)數(shù)組分組更好的寫法。實(shí)現(xiàn)像這種,目標(biāo)數(shù)組長度和原數(shù)組長度不一致的情況,函數(shù)式寫法很容易想到函數(shù)。小結(jié)數(shù)組分組是一個(gè)很簡單的問題,有很多種方法來處理。 今天回答了 @_bleach 的問題:JS生產(chǎn)嵌套數(shù)組(也就是對(duì)數(shù)組分組)更好的寫法?;卮鸬倪^程中對(duì) lodash _.chunk() 產(chǎn)生了好奇,所以分析了一下它的源碼,再加上我自己的解決方案,收集...
摘要:問題描述我經(jīng)常需要使用一些基礎(chǔ)性的功能性函數(shù)比如數(shù)據(jù)去重對(duì)象合并等通常情況下選擇方向大致有個(gè)自己實(shí)現(xiàn)使用原生的使用提供的首先放棄自己實(shí)現(xiàn)這樣的方式因?yàn)楣ぷ髁看蠹词箤?shí)現(xiàn)了沒有經(jīng)過測試不夠穩(wěn)定沒有意義因?yàn)橐呀?jīng)存在現(xiàn)成的別人實(shí)現(xiàn)的其次如果原生提供 問題描述:我經(jīng)常需要使用一些基礎(chǔ)性的, 功能性函數(shù), 比如數(shù)據(jù)去重, 對(duì)象合并等. 通常情況下,選擇方向大致有3個(gè): 自己實(shí)現(xiàn) API 使用原生...
摘要:萬條數(shù)據(jù)依賴讀源碼之從看稀疏數(shù)組與密集數(shù)組原理的原理歸結(jié)起來就是切割和放置。尺在切割之前,需要用尺確定切割的數(shù)量。容器的長度剛好與塊的數(shù)量一致。當(dāng)與塊的數(shù)量相等時(shí),表示已經(jīng)切割完畢,停止切割,最后將結(jié)果返回。 以不正義開始的事情,必須用罪惡使它鞏固?!勘葋啞尔溈税住? 最近很多事似乎印證了這句話,一句謊言最后要用一百句謊言來圓謊。 本文為讀 lodash 源碼的第二篇,后續(xù)文章會(huì)...
閱讀 2070·2023-04-26 01:33
閱讀 1689·2023-04-26 00:52
閱讀 1083·2021-11-18 13:14
閱讀 5660·2021-09-26 10:18
閱讀 2941·2021-09-22 15:52
閱讀 1523·2019-08-29 17:15
閱讀 3048·2019-08-29 16:11
閱讀 1062·2019-08-29 16:11