摘要:文檔地址中文文檔英文文檔源碼地址將數組拆分成多個長度的區塊,并將這些區塊組成一個新數組。如果無法被分割成全部等長的區塊,那么最后剩余的元素將組成一個區塊。
百忙之中(閑來無事)想抽點時間好好讀一下源碼,于是就選了Lodash來寫一個系列罷。讀源碼順序就按照loadsh文檔順序來。
文檔地址:中文文檔?? 英文文檔
源碼地址:gayhub
_.chunk(array, [size=1])
將數組array拆分成多個 size 長度的區塊,并將這些區塊組成一個新數組。 如果array 無法被分割成全部等長的區塊,那么最后剩余的元素將組成一個區塊。
例:
chunk(["a", "b", "c", "d"], 2) // => [["a", "b"], ["c", "d"]] chunk(["a", "b", "c", "d"], 3) // => [["a", "b", "c"], ["d"]]
很實用的一個函數,下面來看下具體實現:
可以看到,chunk依賴了slice.js,具體實現解析已經講過了:傳送門
import slice from "./slice.js"
首先是參數的驗證
size = Math.max(size, 0) const length = array == null ? 0 : array.length if (!length || size < 1) { return [] }
根據length/size向上取整來確定新的數組長度,循環調用切片函數slice,最后返回結果
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
最后貼個源碼:
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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93444.html
摘要:文檔地址中文文檔英文文檔源碼地址第一個函數是,不過源碼中依賴了,所以第一篇文章就從開始。這個函數的作用就是裁剪數組,從下標開始,到下標結束,但是并不包含,并將結果作為一個數組返回。并且注明了這個方法用于代替來確保數組正確返回。 百忙之中(閑來無事)想抽點時間好好讀一下源碼,于是就選了Lodash來寫一個系列罷。讀源碼順序就按照loadsh文檔順序來。 文檔地址:中文文檔?? 英文文檔源...
摘要:原文首發于源碼講解這是我們閱讀源碼的第篇博客,在這篇文章里我們來學習一下的方法。好啦,關于函數暫時就先講到這里啦。與惡龍纏斗過久自身亦成為惡龍凝視深淵過久深淵將回以凝視。 原文首發于Lodash源碼講解 這是我們閱讀Lodash源碼的第2篇博客,在這篇文章里我們來學習一下Lodash的chunk方法。 chunk函數內部依賴其他的函數,依賴的函數如下所示; slice 按照慣例,我們先...
摘要:今天回答了的問題生產嵌套數組也就是對數組分組更好的寫法。實現像這種,目標數組長度和原數組長度不一致的情況,函數式寫法很容易想到函數。小結數組分組是一個很簡單的問題,有很多種方法來處理。 今天回答了 @_bleach 的問題:JS生產嵌套數組(也就是對數組分組)更好的寫法。回答的過程中對 lodash _.chunk() 產生了好奇,所以分析了一下它的源碼,再加上我自己的解決方案,收集...
摘要:問題描述我經常需要使用一些基礎性的功能性函數比如數據去重對象合并等通常情況下選擇方向大致有個自己實現使用原生的使用提供的首先放棄自己實現這樣的方式因為工作量大即使實現了沒有經過測試不夠穩定沒有意義因為已經存在現成的別人實現的其次如果原生提供 問題描述:我經常需要使用一些基礎性的, 功能性函數, 比如數據去重, 對象合并等. 通常情況下,選擇方向大致有3個: 自己實現 API 使用原生...
摘要:萬條數據依賴讀源碼之從看稀疏數組與密集數組原理的原理歸結起來就是切割和放置。尺在切割之前,需要用尺確定切割的數量。容器的長度剛好與塊的數量一致。當與塊的數量相等時,表示已經切割完畢,停止切割,最后將結果返回。 以不正義開始的事情,必須用罪惡使它鞏固。——莎士比亞《麥克白》 最近很多事似乎印證了這句話,一句謊言最后要用一百句謊言來圓謊。 本文為讀 lodash 源碼的第二篇,后續文章會...
閱讀 2028·2023-04-26 01:33
閱讀 1660·2023-04-26 00:52
閱讀 1035·2021-11-18 13:14
閱讀 5394·2021-09-26 10:18
閱讀 2901·2021-09-22 15:52
閱讀 1488·2019-08-29 17:15
閱讀 3017·2019-08-29 16:11
閱讀 1039·2019-08-29 16:11