当你细细琢磨一个 JavaScript 库(Underscore.js-2)

数组函数

数组是集合中的特例,有着优秀的品质。从抽象数据模型角度,可以模拟栈,队列,hash表,树的操作。实际在树的方法实现中也遵循了这种分类方式。

Underscore 不仅处理了规范的数组,同时也将这种能力拓展给了 arguments 类数组。
当然,前文针对集合的方法对于数组也同样适用。

构造数组 _.range([start], stop, [step])

一个用来创建整数灵活编号的列表的函数

_.range(10); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
_.range(1, 11); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
_.range(0, 30, 5); // [0, 5, 10, 15, 20, 25]
_.range(0, -10, -1); // [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
_.range(0); // []

数组索引

除了数组内置的方法,Underscore 提供了三个索引的封装

_.indexOf(array, value, [isSorted])

返回value在该 array 中的索引值,如果value不存在 array中就返回-

_.indexOf([1, 2, 3], 2); //1

_.lastIndexOf(array, value, [fromIndex])

返回value在该 array 中的从最后开始的索引值,如果value不存在 array中就返回-1

_.sortedIndex(list, value, [iteratee], [context])

使用二分查找确定value在list中的位置序号,value按此序号插入能保持list原有的排序。 如果提供iterator函数,iterator将作为list排序的依据,包括你传递的value 。 iterator也可以是字符串的属性名用来排序(比如length)。

var stooges = [{name: 'moe', age: 40}, {name: 'curly', age: 60}];
_.sortedIndex([10, 20, 30, 40, 50], 35); // 3
_.sortedIndex(stooges, {name: 'larry', age: 50}, 'age'); // 1

数组转化为对象 _.object(list, [values])

list 作为对象的 key,values 作为对象属性的 value, 如果 key 值重复,后边的 key值会覆盖前边的 key值。

_.object(['moe', 'larry', 'curly'], [30, 40, 50]);
=> {moe: 30, larry: 40, curly: 50}

_.object([['moe', 30], ['larry', 40], ['curly', 50]]);
=> {moe: 30, larry: 40, curly: 50}

数组截取

_.first(array, [n])

别名 _.head() _.take()

返回数组中前 n 个元素所组成的数组,n 不传则为 1,返回第一个元素(非数组)。

_.first([1,2,3,4,5], 2) // [1,2]

反方向就是 _.last(array, [n])

返回数组中从后向前的 n 个元素,规则与 first 相同

_.initial(array, [n])

排除数组后边的 n 个元素,n 不传则为1,返回除了尾部元素以外的剩余元素数组

反方向就是 _.rest(array, [index])

返回 index 以后的所有元素,index 不传则为 1

数组清洗

去伪存真 _.compact(array)

返回一个除去所有false值的 array副本,副本中无假值。可用于提取稀疏数组中的内容。

_.compact([0, 1, false, 2, '', 3]); // [1, 2, 3]

数组拓扑 _.flatten(array, [shallow])

将一个嵌套多层的数组 array(数组) (嵌套可以是任何层数)转换为只有一层的数组。 如果你传递 shallow参数,数组将只减少一维的嵌套。

_.flatten([1, [2], [3, [[4]]]]); //[1, 2, 3, 4];
_.flatten([1, [2], [3, [[4]]]], true); //[1, 2, 3, [[4]]];

矩阵置换 _.zip(...array)

将 每个arrays中相应位置的值合并在一起

_.zip(['moe', 'larry', 'curly'], [30, 40, 50], [true, false, false]);
=> [["moe", 30, true], ["larry", 40, false], ["curly", 50, false]]

删除指定值 _.without(array, ...value)

返回一个删除所有values值后的 array副本。(注:使用===表达式做相等测试。)

_.without([1, 2, 1, 0, 3, 1, 4], 0, 1); //[2, 3, 4]

除重 _.uniq(array, [isSorted], [iteratee])

别名: unique

返回 array去重后的副本, 使用 === 做相等测试. 如果您确定 array 已经排序, 那么给 isSorted 参数传递 true值, 此函数将运行的更快的算法. 如果要处理对象元素, 传参 iterator 来获取要对比的属性.

_.uniq([1, 2, 1, 3, 1, 4]); //[1, 2, 3, 4]

数组运算

并集 _.union(*arrays)

返回传入的 arrays(数组)并集:按顺序返回,返回数组的元素是唯一的,可以传入一个或多个 arrays(数组)。

_.union([1, 2, 3], [101, 2, 1, 10], [2, 1]); //[1, 2, 3, 101, 10]

交集 _.intersection(*arrays)

返回传入 arrays(数组)交集。结果中的每个值是存在于传入的每个arrays(数组)里。

_.intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]); // [1, 2]

差集 _.difference(array, *others)

类似于without,但返回的值来自array参数数组,并且不存在于other 数组.

_.difference([1, 2, 3, 4, 5], [5, 2, 10]); //[1, 3, 4]

你可能感兴趣的:(当你细细琢磨一个 JavaScript 库(Underscore.js-2))