Lodash 4.17.4 API學習 -- Collection

作者:Yeaseon

上篇文章,我們已經把關于Array部分的API學習了一遍,現在我們來開始下一篇Collection器联。

下列API的collection參數指代Array | Object兩種類型。

_.countBy

  • _.countBy(collection, [iteratee=_.identity])

創(chuàng)建一個key-value的對象,key是通過將collection按照iteratee規(guī)則迭代得到的愈污,對應的value則是,這個key值出現了N次轮傍,value就是N暂雹。也就是迎合了API的count的意思。

例子:

_.countBy([6.1, 4.2, 6.3], Math.floor);
// => { '4': 1, '6': 2 }
 
// The `_.property` iteratee shorthand.
_.countBy(['one', 'two', 'three'], 'length');
// => { '3': 2, '5': 1 }

解釋第一個例子吧创夜,[6.1, 4.2, 6.3]分別執(zhí)行Math.floor得到[6, 4, 6],其中4出現1次杭跪,6出現2次,所以結果是{ '4': 1, '6': 2 }

_.every

  • _.every(collection, [predicate=_.identity])

如果collection全部元素滿足predicate條件驰吓,返回true涧尿;否則只要出現不滿足的,就返回false檬贰。predicate調用三個參數value, index, array姑廉。

例子:

_.every([true, 1, null, 'yes'], Boolean);
// => false
 
var users = [
  { 'user': 'barney', 'age': 36, 'active': false },
  { 'user': 'fred',   'age': 40, 'active': false }
];
 
// The `_.matches` iteratee shorthand.
_.every(users, { 'user': 'barney', 'active': false });
// => false
 
// The `_.matchesProperty` iteratee shorthand.
_.every(users, ['active', false]);
// => true
 
// The `_.property` iteratee shorthand.
_.every(users, 'active');
// => false

_.filter

  • _.filter(collection, [predicate=_.identity])

遍歷collection全部元素,返回滿足predicate條件的元素組成的新數組偎蘸。predicate調用三個參數value, index, array庄蹋。

例子:

var users = [
  { 'user': 'barney', 'age': 36, 'active': true },
  { 'user': 'fred',   'age': 40, 'active': false }
];
 
_.filter(users, function(o) { return !o.active; });
// => objects for ['fred']
 
// The `_.matches` iteratee shorthand.
_.filter(users, { 'age': 36, 'active': true });
// => objects for ['barney']
 
// The `_.matchesProperty` iteratee shorthand.
_.filter(users, ['active', false]);
// => objects for ['fred']
 
// The `_.property` iteratee shorthand.
_.filter(users, 'active');
// => objects for ['barney']

_.find

  • _.find(collection, [predicate=_.identity], [fromIndex=0])

與上面_.filter不同的是_.find只返回第一個匹配的元素瞬内,可以通過fromIndex指定查找位置,默認fromIndex=0限书。如果沒有匹配的虫蝶,返回undefined

例子:

var users = [
  { 'user': 'barney',  'age': 36, 'active': true },
  { 'user': 'fred',    'age': 40, 'active': false },
  { 'user': 'pebbles', 'age': 1,  'active': true }
];
 
_.find(users, function(o) { return o.age < 40; });
// => object for 'barney'
 
// The `_.matches` iteratee shorthand.
_.find(users, { 'age': 1, 'active': true });
// => object for 'pebbles'
 
// The `_.matchesProperty` iteratee shorthand.
_.find(users, ['active', false]);
// => object for 'fred'
 
// The `_.property` iteratee shorthand.
_.find(users, 'active');
// => object for 'barney'

_.findLast

  • _findLast(collection, [predicate=_.identity], [fromIndex=collection.length-1])

_.findLast_find方法不同的是從右到左查找倦西,fromIndex默認值collection.length-1能真。

例子:

_.findLast([1, 2, 3, 4], function(n) {
  return n % 2 == 1;
});
// => 3

_flatMap

  • _.flatMap(collection, [iteratee=_.identity])

collection全部元素迭代執(zhí)行iteratee,將得到的元素組合成一個flattened數組(我理解的就是變成N-1維數組)扰柠,iteratee調用三個參數value, index|key, collection粉铐。

例子:

function duplicate(n) {
  return [n, n];
}
 
_.flatMap([1, 2], duplicate);
// => [1, 1, 2, 2]

解釋一下,[1, 2]調用duplicate得到[[1, 1], [2, 2]]卤档,通過_.flatMap使其扁平化[1, 1, 2, 2]蝙泼。

_.flatMapDeep

  • _.flatMapDeep(collection, [iteratee=_.identity])

這個方法是_.flatMap的升級版,會把多維數組變成一維數組劝枣。

例子:

function duplicate(n) {
  return [[[n, n]]];
}
 
_.flatMapDeep([1, 2], duplicate);
// => [1, 1, 2, 2]

_.flatMapDepth

  • _.flatMapDepth(collection, [iteratee=_.identity], [depth=1])

這個是可以指定降維次數_.flatMapDeep的版本汤踏。depth降維次數默認為1。

例子:

function duplicate(n) {
  return [[[n, n]]];
}
 
_.flatMapDepth([1, 2], duplicate, 2);
// => [[1, 1], [2, 2]]

_.forEach

  • _.forEach(collection, [iteratee=_.identity])

collection每個元素執(zhí)行iteratee方法舔腾,iteratee可以調用三個參數value, index|key, collection溪胶,當collection是數組時第二個參數為index,當collection是對象時第二個參數為key稳诚。
iteratee函數可以通過顯式返回false提前退出迭代哗脖。

返回值:返回collection本身

例子:

_.forEach([1, 2], function(value) {
  console.log(value);
});
// => Logs `1` then `2`.
 
_.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
  console.log(key);
});
// => Logs 'a' then 'b' (iteration order is not guaranteed).

_.forEachRight

  • _.forEachRight(collection, [iteratee=_.identity])

_.forEach方法的區(qū)別,collection元素從右到左執(zhí)行iteratee扳还。

例子:

_.forEachRight([1, 2], function(value) {
  console.log(value);
});
// => Logs `2` then `1`.

_.groupBy

  • _.groupBy(collection, [iteratee=_.identity])

collection元素執(zhí)行iteratee方法,得到key普办,value就是該元素工扎。iteratee方法調用一個參數value

返回值:返回key-value組成的新對象

例子:

_.groupBy([6.1, 4.2, 6.3], Math.floor);
// => { '4': [4.2], '6': [6.1, 6.3] }
 
// The `_.property` iteratee shorthand.
_.groupBy(['one', 'two', 'three'], 'length');
// => { '3': ['one', 'two'], '5': ['three'] }

_.includes

  • _.incluede(collection, value, [fromIndex=0])

檢查value是否在collection中衔蹲,fromIndex指定檢查的位置,默認是0呈础。存在返回true舆驶,不存在返回false

例子:

_.includes([1, 2, 3], 1);
// => true
 
_.includes([1, 2, 3], 1, 2);
// => false
 
_.includes({ 'a': 1, 'b': 2 }, 1);
// => true
 
_.includes('abcd', 'bc');
// => true

_.invokeMap

  • _.invokeMap(collection, path, [args])

collection每個元素調用path方法而钞,返回調用后的結果組成的新數組沙廉。args參數將會提供給被調用的方法。

例子:

_.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
// => [[1, 5, 7], [1, 2, 3]]
 
_.invokeMap([123, 456], String.prototype.split, '');
// => [['1', '2', '3'], ['4', '5', '6']]

_.keyBy

  • _.keyBy(collection, [iteratee=_.identity])

返回一個key-value對象臼节,keycollection每個元素執(zhí)行iteratee后的結果撬陵,對應的value是最后一個生成該keycollection值珊皿。iteratee調用一個參數value

例子:

var array = [
  { 'dir': 'left', 'code': 97 },
  { 'dir': 'right', 'code': 100 },
  { 'dir': 'right', 'code': 99}
];
 
_.keyBy(array, 'dir');
// => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 99 } }

_.map

  • _.map(collection, [iteratee=_.identity])

這個就比較簡單了巨税,為collection的每個元素執(zhí)行iteratee方法蟋定,得到的結果映射成一個新的數組。

例子:

function square(n) {
  return n * n;
}
 
_.map([4, 8], square);
// => [16, 64]
 
_.map({ 'a': 4, 'b': 8 }, square);
// => [16, 64] (iteration order is not guaranteed)
 
var users = [
  { 'user': 'barney' },
  { 'user': 'fred' }
];
 
// The `_.property` iteratee shorthand.
_.map(users, 'user');
// => ['barney', 'fred']

_.orderBy

  • _.orderBy(collection, [iteratees=[_.identity], [orders])

這個方法很像_.sortBy草添,不過_.orderBy允許指定排序方式iteratees驶兜。orders默認是asc(升序),也可以指定為desc远寸,返回一個新的有序的數組抄淑。

例子:

var users = [
  { 'user': 'fred',   'age': 48 },
  { 'user': 'barney', 'age': 34 },
  { 'user': 'fred',   'age': 40 },
  { 'user': 'barney', 'age': 36 }
];
 
// Sort by `user` in ascending order and by `age` in descending order.
_.orderBy(users, ['user', 'age'], ['asc', 'desc']);
// => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]

這個例子,排序關鍵字有兩個userage驰后,兩個for循環(huán)肆资,排序完成一個,在做另一個排序灶芝。

_.partition

  • _.partition(collection, [predicate=_.identity])

collection分成兩組郑原,一組是執(zhí)行predicate返回true,另一組是返回false监署。返回的結果應該是一個二維數組颤专。

例子:

var users = [
  { 'user': 'barney',  'age': 36, 'active': false },
  { 'user': 'fred',    'age': 40, 'active': true },
  { 'user': 'pebbles', 'age': 1,  'active': false }
];
 
_.partition(users, function(o) { return o.active; });
// => objects for [['fred'], ['barney', 'pebbles']]
 
// The `_.matches` iteratee shorthand.
_.partition(users, { 'age': 1, 'active': false });
// => objects for [['pebbles'], ['barney', 'fred']]
 
// The `_.matchesProperty` iteratee shorthand.
_.partition(users, ['active', false]);
// => objects for [['barney', 'pebbles'], ['fred']]
 
// The `_.property` iteratee shorthand.
_.partition(users, 'active');
// => objects for [['fred'], ['barney', 'pebbles']]

_.reduce

  • _.reduce(collection, [iteratee=_.identity], [accumulator])

該方法作為一個累加器,把數組中的每個值(從左到右)執(zhí)行iteratee方法開始縮減钠乏,最終變成一個值栖秕。如果accumulator沒有給出,collection的第一個元素被當做初始值晓避。
iteratee調用四個參數accumulator, value簇捍, index|key, collection

例子:

_.reduce([1, 2], function(sum, n) {
  return sum + n;
}, 0);
// => 3
 
_.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
  (result[value] || (result[value] = [])).push(key);
  return result;
}, {});
// => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)

_.reduceRight

  • _.reduceRight(collection, [iteratee=_.identity], [accumulator])

這個方法與_.reduce()方法不同的是從右到左計算俏拱。

例子:

var array = [[0, 1], [2, 3], [4, 5]];
 
_.reduceRight(array, function(flattened, other) {
  return flattened.concat(other);
}, []);
// => [4, 5, 2, 3, 0, 1]

_.reject

  • _.reject(collection, [predicate=_.identity])

這個方法與_.filter相反暑塑,返回collection執(zhí)行predicate返回false條件的元素組成的新數組。

例子:

var users = [
  { 'user': 'barney', 'age': 36, 'active': false },
  { 'user': 'fred',   'age': 40, 'active': true }
];
 
_.reject(users, function(o) { return !o.active; });
// => objects for ['fred']
 
// The `_.matches` iteratee shorthand.
_.reject(users, { 'age': 40, 'active': true });
// => objects for ['barney']
 
// The `_.matchesProperty` iteratee shorthand.
_.reject(users, ['active', false]);
// => objects for ['fred']
 
// The `_.property` iteratee shorthand.
_.reject(users, 'active');
// => objects for ['barney']

_.sample

  • _.sample(collection)

返回collection中隨機的一個元素锅必。

例子:

_.sample([1, 2, 3, 4]);
// => 2

_.sampleSize

  • _.sampleSize(collection, [n=1])

返回collection中隨機的n個數事格,默認n=1

例子:

_.sampleSize([1, 2, 3], 2);
// => [3, 1]
 
_.sampleSize([1, 2, 3], 4);
// => [2, 3, 1]

_.shuffle

  • _.shuffle(collection)

collection元素的順序隨機打亂搞隐,返回打亂后的collection驹愚。

例子:

_.shuffle([1, 2, 3, 4]);
// => [4, 1, 3, 2]

_.size

  • _.size(collection)

返回collectionlength,collection可以是Array|Object|string

例子:

_.size([1, 2, 3]);
// => 3
 
_.size({ 'a': 1, 'b': 2 });
// => 2
 
_.size('pebbles');
// => 7

_.some

  • _.some(collection, [predicate=_.identity])

collection元素執(zhí)行predicate劣纲,返回布爾值,迭代過程遇到返回false就停止逢捺。predicate調用三個參數value, index|key, collection

例子:

_.some([null, 0, 'yes', false], Boolean);
// => true
 
var users = [
  { 'user': 'barney', 'active': true },
  { 'user': 'fred',   'active': false }
];
 
// The `_.matches` iteratee shorthand.
_.some(users, { 'user': 'barney', 'active': false });
// => false
 
// The `_.matchesProperty` iteratee shorthand.
_.some(users, ['active', false]);
// => true
 
// The `_.property` iteratee shorthand.
_.some(users, 'active');
// => true

_.sortBy

  • _.sortBy(collection, [iteratee=[_.identity]])

按照iteratee規(guī)則對collection進行排序癞季。

例子:

var users = [
  { 'user': 'fred',   'age': 48 },
  { 'user': 'barney', 'age': 36 },
  { 'user': 'fred',   'age': 40 },
  { 'user': 'barney', 'age': 34 }
];
 
_.sortBy(users, [function(o) { return o.user; }]);
// => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
 
_.sortBy(users, ['user', 'age']);
// => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末劫瞳,一起剝皮案震驚了整個濱河市倘潜,隨后出現的幾起案子,更是在濱河造成了極大的恐慌志于,老刑警劉巖涮因,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異恨憎,居然都是意外死亡蕊退,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門憔恳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瓤荔,“玉大人,你說我怎么就攤上這事钥组∈湎酰” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵程梦,是天一觀的道長点把。 經常有香客問我,道長屿附,這世上最難降的妖魔是什么郎逃? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮挺份,結果婚禮上褒翰,老公的妹妹穿的比我還像新娘。我一直安慰自己匀泊,他們只是感情好优训,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著各聘,像睡著了一般揣非。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上躲因,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天早敬,我揣著相機與錄音,去河邊找鬼大脉。 笑死搁嗓,一個胖子當著我的面吹牛,可吹牛的內容都是我干的箱靴。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼荷愕,長吁一口氣:“原來是場噩夢啊……” “哼衡怀!你這毒婦竟也來了棍矛?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤抛杨,失蹤者是張志新(化名)和其女友劉穎够委,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體怖现,經...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡茁帽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了屈嗤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潘拨。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖饶号,靈堂內的尸體忽然破棺而出铁追,到底是詐尸還是另有隱情,我是刑警寧澤茫船,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布琅束,位于F島的核電站,受9級特大地震影響算谈,放射性物質發(fā)生泄漏涩禀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一然眼、第九天 我趴在偏房一處隱蔽的房頂上張望艾船。 院中可真熱鬧,春花似錦罪治、人聲如沸丽声。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽雁社。三九已至,卻和暖如春晒骇,著一層夾襖步出監(jiān)牢的瞬間霉撵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工洪囤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留徒坡,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓瘤缩,卻偏偏與公主長得像喇完,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子剥啤,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內容