寫koa時(shí)候突然發(fā)現(xiàn)lodash這個(gè)庫,因?yàn)榘l(fā)現(xiàn)對(duì)array object的遍歷操作不在原數(shù)據(jù)進(jìn)行,發(fā)現(xiàn)真的很有用。
import _ from 'lodash'
一些lodash常用函數(shù):
1.chunk,將數(shù)組進(jìn)行切分。
const arr = [1,2,3,4,5,6,7,8,9];
_.chunk(arr,2);
// =>[[1,2],[3,4],[5,6],[7,8],[9]]
這個(gè)函數(shù)把數(shù)組按照一定的長度分開,返回新的數(shù)組。(片段化數(shù)組)
2.compact,去除假值。(將所有的空值,0,NaN過濾掉)
_.compact(['1','2',' ',0])
// => ['1','2']
3.uniq,數(shù)組去重。(將數(shù)組中的對(duì)象去重,只能是數(shù)組去重,不能是對(duì)象去重。)
_.uniq([1,1,3])
// => [1,3]
這跟介紹的第二個(gè)函數(shù)compact有很好的配合作用。(后端接口傳來的數(shù)據(jù)很多是有重復(fù)或者空值的,這時(shí)候就可以使用兩個(gè)函數(shù)來過濾數(shù)據(jù)。lodash只是最基礎(chǔ)的庫,其實(shí)可以將幾個(gè)函數(shù)封裝起來組件自己的庫。)
4.filter和reject,過濾集合,傳入匿名函數(shù)。(二者放在一起討論的原因是,兩個(gè)函數(shù)類似但返回的值是相反。)
_.filter([1,2],x => x = 1)
// => [1]
_.reject([1,2],x => x=1)
// => [2]
這兩個(gè)過濾器,第二個(gè)參數(shù)值是false的時(shí)候返回是reject的功能,相反是true的時(shí)候是filter。
5.map和forEach,數(shù)組遍歷。
區(qū)別是map可以遍歷空數(shù)組,且map可以有返回值。foreach不能return
不過二者都不改變原來的數(shù)組。
_.map([1,2],x => x+1)
// => [2,3]
- merge參數(shù)合并
var object = {
'a': [{ 'b': 2 }, { 'd': 4 }]
};
var other = {
'a': [{ 'c': 3 }, { 'e': 5 }]
};
_.merge(object, other);
// => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
遞歸的將源對(duì)象和繼承的可枚舉字符串監(jiān)控屬性合并到目標(biāo)對(duì)象中。源對(duì)象從左到右引用,后續(xù)來源將覆蓋以前來源的屬性分配。
在實(shí)際開發(fā)中,前端在接口的請(qǐng)求可以merge一下之前的query和現(xiàn)在改變的查詢的值,再去請(qǐng)求后端接口的數(shù)據(jù)。類似state
7.extend,類似參數(shù)對(duì)象合并。
function Foo() {
this.a = 1;
}
function Bar() {
this.c = 3;
}
Foo.prototype.b = 2;
Bar.prototype.d = 4;
_.assignIn({ 'a': 0 }, new Foo, new Bar);
// => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
8.cancat,數(shù)組連接
var array = [1];
var other = _.concat(array, 2, [3], [[4]]);
console.log(other);
// => [1, 2, 3, [4]]
console.log(array);
// => [1]
9.keys ,取出對(duì)象中所有的key值組成新的數(shù)組。
function Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
_.keys(new Foo);
// => ['a', 'b'] (iteration order is not guaranteed)
_.keys('hi');
// => ['0', '1']