Lodash在react-native的使用

简介

Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。它内部封装了诸多对字符串、数组、对象等常见数据类型的处理函数。
Lodash 通过降低 array、number、objects、string 等等的使用难度从而让语法变得更简单。
Lodash 的模块化方法 非常适用于:

  • 遍历 array、object 和 string
  • 对值进行操作和检测
  • 创建符合功能的函数

安装

yarn add loads

模块格式

Lodash 提供 多种构建方式 和模块格式。

功能简介

  • Array,适用于数组类型,比如增删改查、填充数据(.fill)、查找元素(.findeIndex)、数组分片(_.chunk)等操作
  • Collection,适用于数组和对象类型,部分适用于字符串,比如遍历、分组、查找、过滤等操作
  • Function,适用于函数类型,比如节流、延迟、缓存、设置钩子等操作
  • Lang,普遍适用于各种类型,常用于执行类型判断和类型转换、深拷贝
  • Math,适用于数值类型,常用于执行数学运算(最大值、最小值求和)
  • Number,适用于生成随机数,比较数值与数值区间的关系
  • Object,适用于对象类型,常用于对象的创建、扩展、类型转换、检索、集合等操作
  • Seq,常用于创建链式调用,提高执行性能(惰性计算)
  • String,适用于字符串类型
  • Util,一些工具函数,比如_.attmpt 替代 try-catch 的方式,当解析 JSON 出错时,该方法会返回一个Error对象
  • Properties, 模板方法 ES6的模板字符串和这个功能很像(对模板字符串进行了正则解析,将需要填入数据的位置预留出来,拼接成一个字符串)
  • Methods, 对lodash函数的引用

数组 Array

_.chunk

_.chunk(array, [size=1])
将数组 array 拆分成多个 size 长度的区块,并将这些区块组成一个新数组。 如果array 无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块。
参数:

  • array (Array): 传入的数组(允许字符串),如果传入的参数没有length属性,返回空数组;
  • [size=1] (number): 划分的子数组的长度(不传默认为1),如果是非正数,返回空数组;如果是正小数,size=parseInt(size);
    返回:
  • (Array): 返回一个包含拆分区块的新数组(一个二维数组)。
_.chunk(['a', 'b', 'c', 'd'], 2);
// => [['a', 'b'], ['c', 'd']]
 
_.chunk(['a', 'b', 'c', 'd'], 3);
// => [['a', 'b', 'c'], ['d']]

_. compact

__.compact(array)
创建一个新数组,包含原数组中所有的非假值元素。例如false, null, 0, "", undefined, 和 NaN 都是被认为是“假值”。
参数:

  • array (Array): 如果传入字符串,得到的效果类似对字符串执行split(' ')方法。
    返回:
  • (Array): 返回新数组。
_.compact([0, 1, false, true, 2, '', 3]);
// => [1, 2, 3]

_. concat(JS 自带的concat()方法类似)

_.concat(array, [values])
创建一个新数组,将array与任何数组 或 值连接在一起。
参数:

  • array (Array): 被连接的数组。
  • [values] (...*): 连接的值。
    返回:
    (Array): 返回连接后的新数组。
let array = [1];
let other = _.concat(array, 2, [3], [[4]]);
 
console.log(other);
// => [1, 2, 3, [4]]
 
console.log(array);  
// => [1]

_. join (类似自带的join()函数)

_.join(array, [separator=','])
将 array 中的所有元素转换为由 separator 分隔的字符串。

_.join(['a', 'b', 'c'], '~');
// => 'a~b~c'

_. nth

_.nth(array, [n=0])
获取array数组的第n个元素。如果n为负数,则返回从数组结尾开始的第n个元素。

const array = ['a', 'b', 'c', 'd'];
_.nth(array, 1);
// => 'b'
 
_.nth(array, -2);
// => 'c';

_. pull

_.pull(array, [values])
移除数组array中所有和给定值相等的元素,使用 SameValueZero 进行全等比较。

const array = [1, 2, 3, 1, 2, 3];
_.pull(array, 2, 3);
console.log(array);
// => [1, 1]

_.pullAll

_. pullAll(array, [values])
这个方法类似 pull ,区别是这个方法接收一个要移除值的数组。

const array = [1, 2, 3, 1, 2, 3];
_.pullAll(array, [2, 3]);
console.log(array);
// => [1, 1]

_.fromPairs(pairs)

将一个json数组重新组装变为json对象。
参数:

  • pairs (Array): 键值对pairs。
_.fromPairs([['fred', 30], ['barney', 40]]);
// => { 'fred': 30, 'barney': 40 }

语言

_.castArray

_.castArray(value)
如果 value 不是数组, 那么强制转为数组。
参数:

  • value (*): 要处理的值。
    返回
  • (Array): 返回转换后的数组。
_.castArray(1);
// => [1]
_.castArray({ 'a': 1 });
// => [{ 'a': 1 }]
_.castArray('abc');
// => ['abc']
_.castArray(null);
// => [null]
_.castArray(undefined);
// => [undefined]
_.castArray();
// => []

_.isEmpty

_.isEmpty(value)
检查 value 是否为一个空对象,集合,映射或者set。 判断的依据是除非是有枚举属性的对象,length 大于 0 的 arguments object, array, string 或类jquery选择器。
参数:

  • value (*): 要检查的值。
    返回
  • (boolean): 如果 value 为空,那么返回 true,否则返回 false。
_.isEmpty(null);
// => true
_.isEmpty(true);
// => true
_.isEmpty(1);
// => true
_.isEmpty([1, 2, 3]);
// => false
_.isEmpty({ 'a': 1 });
// => false

_.isEqual

_.isEqual(value, other)
执行深比较来确定两者的值是否相等。
这个方法支持比较 arrays, array buffers, booleans, date objects, error objects, maps, numbers, Object objects, regexes, sets, strings, symbols, 以及 typed arrays. Object 对象值比较自身的属性,不包括继承的和可枚举的属性。 不支持函数和DOM节点比较。
参数

  • value (*): 用来比较的值。
  • other (*): 另一个用来比较的值。
    返回
  • (boolean): 如果 两个值完全相同,那么返回 true,否则返回 false。
var object = { 'a': 1 };
var other = { 'a': 1 };
 
_.isEqual(object, other);
// => true

字符串

_.split

_.split([string=''], separator, [limit])
根据separator 拆分字符串string
参数

  • [string=''] (string): 要拆分的字符串。
  • separator (RegExp|string): 拆分的分隔符。
  • [limit] (number): 限制结果的数量。
    返回
  • (Array): 返回拆分部分的字符串的数组。
_.split('a-b-c', '-', 2);
// => ['a', 'b']

_.trim

_.trim([string=''], [chars=whitespace]);
从string字符串中移除前面和后面的 空格 或 指定的字符。
参数

  • [string=''] (string): 要处理的字符串。
  • [chars=whitespace] (string): 要移除的字符。
    返回
  • (string): 返回处理后的字符串。
_.trim('  abc  ');
// => 'abc'
_.trim('-_-abc-_-', '_-');
// => 'abc'

_.words

_.words([string=''], [pattern])
拆分字符串string中的词为数组 。
参数

  • [string=''] (string): 要拆分的字符串。
  • [pattern] (RegExp|string): 匹配模式。
    返回
  • (Array): 返回拆分string后的数组。
_.words('fred, barney, & pebbles');
// => ['fred', 'barney', 'pebbles']
_.words('fred, barney, & pebbles', /[^, ]+/g);
// => ['fred', 'barney', '&', 'pebbles']

_.pad

_.pad([string=''], [length=0], [chars=' '])
如果string字符串长度小于 length 则从左侧和右侧填充字符。 如果没法平均分配,则截断超出的长度。
参数

  • [string=''] (string): 要填充的字符串。
  • [length=0] (number): 填充的长度。
  • [chars=' '] (string): 填充字符。
    返回
  • (string): 返回填充后的字符串。
_.pad('abc', 8);
// => '  abc   '
 _.pad('abc', 8, '_-');
// => '_-abc_-_'
 _.pad('abc', 3);
// => 'abc'

_.padEnd

_.padEnd([string=''], [length=0], [chars=' '])
如果string字符串长度小于 length 则在右侧填充字符。 如果超出length长度则截断超出的部分。
参数

  • [string=''] (string): 要填充的字符串。
  • [length=0] (number): 填充的长度。
  • [chars=' '] (string): 填充字符。
    返回
    (string): 返回填充后的字符串。
_.padEnd('abc', 6);
// => 'abc   '
 _.padEnd('abc', 6, '_-');
// => 'abc_-_'
 _.padEnd('abc', 3);
// => 'abc'

_.padStart

_.padStart([string=''], [length=0], [chars=' '])
如果string字符串长度小于 length 则在左侧填充字符。 如果超出length长度则截断超出的部分(截断前边的)。
参数

  • [string=''] (string): 要填充的字符串。
  • [length=0] (number): 填充的长度。
  • [chars=' '] (string): 填充字符。
    返回
  • (string): 返回填充后的字符串。
_.padStart('abc', 6);
// => '   abc'
 _.padStart('abc', 6, '_-');
// => '_-_abc'
 _.padStart('abc', 3);
// => 'abc'

集合

_.forEach

.forEach(collection, [iteratee=.identity])
调用 iteratee 遍历 collection(集合) 中的每个元素, iteratee 调用3个参数: (value, index|key, collection)。 如果迭代函数(iteratee)显式的返回 false ,迭代会提前退出。

注意: 与其他"集合"方法一样,类似于数组,对象的 "length" 属性也会被遍历。想避免这种情况,可以用_.forIn 或者_.forOwn 代替。
参数

  • collection (Array|Object): 一个用来迭代的集合。
  • [iteratee=_.identity] (Function): 每次迭代调用的函数。
    返回
  • (*): 返回集合 collection。


_.map

.map(collection, [iteratee=.identity])
创建一个数组, value(值) 是 iteratee(迭代函数)遍历 collection(集合)中的每个元素后返回的结果。 iteratee(迭代函数)调用3个参数:
(value, index|key, collection).
参数

  • collection (Array|Object): 用来迭代的集合。
  • [iteratee=_.identity] (Array|Function|Object|string): 每次迭代调用的函数。
    返回
  • (Array): 返回新的映射后数组。
var users = [
  {name: "张", "email": "zhang@email.com"},
  {name: "江",   "email": "jiang@email.com"},
  {name: "李",  "email": "li@email.com"}
];
var emails = users.map(function (user) { return user.email; });
console.log(emails.join(", ")); 
// =>  zhang@email.com, jiang@email.com, li@email.com

Lodash中文文档

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容