一 数组(Array)
1 _.chunk() 等份拆分数组
_.chunk(array, [size=1])
将 array 拆分成多个 size 长度的块,把这些块组成一个新数组。 如果 array 无法被分割成全部等长的块,那么最后剩余的元素将组成一个块。
例子:
_.chunk(['a', 'b', 'c', 'd'], 2);
// => [['a', 'b'], ['c', 'd']]
2._.concat() 拼接成新数组(将数组或值)
_.concat(array, [values])
例子:
var array = [1];
var other = _.concat(array, 2, [3], [[4]]);
// => [1, 2, 3, [4]]
3. _.difference() 返回前一个数组不在后一个数组中的的值组成的数组
_.difference(array, [values])
例子:
_.difference([1, 2, 3], [4, 2]);
// => [1, 3]
同类方法还有 .differenceBy .differenceWith
4._.drop() 将array前 n 个元素去除,返回剩余部分
_.drop(array, [n=1])
参数 [n=1] (number): 去掉的元素个数。
例子:
_.drop([1, 2, 3], 2);
// => [3]
5. _.fill() 使用 value 值来填充(也能替换) array
_.fill(array, value, [start=0], [end=array.length])
从start位置开始, 到end位置结束(但不包含end位置)
例子:
_.fill(Array(3), 2);
// => [2, 2, 2]
_.fill([4, 6, 8], '*', 1, 2);
// => [4, '*', 8]
6._.findIndex() 返回符合条件的第一个元素的索引
_.findIndex(array, [predicate=_.identity], [thisArg])
该方法类似 _.find,区别是该方法返回的是符合 predicate条件的第一个元素的索引,而不是返回元素本身.
例子:
var users = [
{ 'user': 'barney', 'active': false },
{ 'user': 'fred', 'active': false }
];
_.findIndex(users, function(chr) {
return chr.user == 'barney';
});
// => 0
同类方法: .findLastIndex() 类似 .findIndex ,区别是其从右到左遍历数组.
7. _.flatten() 嵌套数组的维数减少
_.flatten(array, [isDeep])
flattened(平坦). 如果 isDeep 值为 true 时,嵌套数组将递归为一维数组, 否则只减少嵌套数组一个级别的维数.
例子:
_.flatten([1, [2, 3, [4]]]);
// => [1, 2, 3, [4]]
// using `isDeep`
_.flatten([1, [2, 3, [4]]], true);
// => [1, 2, 3, 4]
8. _.fromPairs() 键值对数组转对象
_.fromPairs(pairs)
它是_.toPairs
的反操作
例子:
_.fromPairs([['a', 1], ['b', 2]]);
// => { 'a': 1, 'b': 2 }
9. _.intersection() 取出各数组中全等的元素
使用 SameValueZero方式平等比较
_.intersection([arrays])
例子:
_.intersection([1, 2], [4, 2], [2, 1]);
// => [2]
同类方法还有 .intersectionBy .intersectionWith
10. _.pull() 移除数组array中所有和 values 相等的元素 (常用!数组特定元素去除)
使用 SameValueZero 进行全等比较(基本数据类型值相同,数组,对象等数据类型必须完全相同(即引用相同)才算)
_.pull(array, [values])
不同于 _.without方法,此方法改变了数组 array(并不是原来的数组了).
注意:它使用 SameValueZero 进行全等比较(基本数据类型值相同,数组,对象等数据类型必须完全相同(即引用相同)才算)
所以,要去除数组里是对象等复杂数据类型不用pull,可以用下面的_.remove()实现。
例子:
var array = [1, 2, 3, 1, 2, 3];
_.pull(array, 2, 3);
console.log(array);
// => [1, 1]
let objA = {1:2};
let arrayA = [{1:2},{3:4}];
_.pull(arrayA,objA) //注意:仍为[{1:2},{3:4}] 因为对象的值相等并非完全相等,要引用指向相同才算
类似方法还有: .pullAll .pullAllBy .pullAllWith .pullAt
11. _.remove() 移除数组 array 中满足 predicate 条件的所有元素
与此方法作用不同,数组本身的splice()用来删除某指定位置的元素。
返回的是被移除元素数组.
语法
_.remove(array, [predicate=_.identity], [thisArg])
Note: 和方法 _.filter不一样, 此方法彻底改变数组array.
例子:
var array = [1, 2, 3, 4];
var evens = _.remove(array, function(n) {
return n % 2 == 0;
});
console.log(array);
// => [1, 3]
console.log(evens);
// => [2, 4]
12. _.reverse() 逆序(第一个元素变最后一个,依次类推)
语法
_.reverse(array)
例子
var array = [1, 2, 3];
_.reverse(array);
// => [3, 2, 1]
13. _.union() 联合多个数组,创建一个没有重复元素的数组
语法
_.union([arrays])
例子
_.union([2], [1, 2]);
// => [2, 1]
14. .unionBy() 联合多个数组,去除数组相互间重复的元素,重复的只留下一个(和.union()相比它可通过某条件判断是否重复)
语法
_.unionBy([arrays], [iteratee=_.identity])
例子
_.unionBy([2.1], [1.2, 2.3], Math.floor);
// => [2.1, 1.2]
// The `_.property` iteratee shorthand.
_.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
// => [{ 'x': 1 }, { 'x': 2 }]
15. .uniq() 一个数组内元素去重(而.union()是联合多个数组为一个没有重复元素的数组)
语法
_.uniq(array)
例子
_.uniq([2, 1, 2]);
// => [2, 1]
相似的方法还有 .uniqBy() .uniqWith() 可以支持按某些规则去重。
uniqBy可以指定key来去重对象元素的数组
例如:
uniqBy([{ a: 1}, {a: 2}, {a: 1}], 'a'); // => [{a: 1}, {a:2}]
16. _.without() 某数组中去掉某些元素从而形成一个新数组
语法
_.without(array, [values])
注意: 和_.pull不同,此方法是返回一个新数组
例子