【五十三】Collections

underscore為集合類對(duì)象提供了一直的接口邻耕。集合類是指 Array和Object,暫不支持Map和Set纪隙。

<p>
</br>

map / filter

Arraymap()filter()類似赊豌,但是underscore的map()filter()可以作用于Object。當(dāng)作用于Object時(shí)绵咱,傳入的函數(shù)為function (value, key)碘饼,第一個(gè)參數(shù)接受value,第二個(gè)參數(shù)接受key:

'use strict';

var obj = {
    name: 'bob',
    school: 'No.1 middle school',
    address: 'xueyuan road'
};

var upper = -.map(obj, function (value, key) {
      return value.toUpperCase();
});

alert(JSON.stringify(upper));

你也許會(huì)想悲伶,為啥對(duì)Object作map()操作的返回結(jié)果是Array?結(jié)果是Object才合理鞍铡!把_.map換成_.mapObject再試試麸锉。

<p>
</br>

every / some

當(dāng)集合的所有元素都滿足條件時(shí)钠绍,_.every()函數(shù)返回'true',當(dāng)集合的至少一個(gè)元素滿足條件時(shí), _.some()函數(shù)返回true:

'use strict';

// 所有元素都大于0花沉?
_.every([1, 4, 7, -3, -9], (x) => x>0);  // false
// 至少一個(gè)元素大于0?
_.some([1, 4, 7, -3, -9], (x) => x>0);  // true

當(dāng)集合是Object時(shí)柳爽,我們可以同時(shí)獲得value和Key:

'use strict';
var obj = {
    name: 'bob',
    school: 'No.1 middle school',
    address: 'xueyuan road'
};
// 判斷key和value是否全部是小寫:

var r1 = _.every(obj. function (value, key) {
    return value === value.toLowerCase() && key === key.toLowerCase();
});

var r2 = _.some(obj. function (value, key) {
    return value === value.toLowerCase() && key === key.toLowerCase();
});

alert('every key-value are lowercase: ' + r1 + '\nsome key-value are lowercase: ' + r2);

<p>
</br>

max / min

這兩個(gè)函數(shù)直接返回集合中最大和最小的數(shù):

'use strict';
var arr = [3, 5, 7, 9];
_.max(arr);  //9

_.min(arr);  // 3

// 空集合會(huì)返回-Indinity和Infinity,所以要先判斷集合不為空:
_.max([])
-Infinity
_.min([])
Infinity

注意碱屁,如果集合是Object磷脯,max()min()只作用于value,忽略掉key:

'use strict';
_.max({a:1, b:2, c:3});  //3

<p>
</br>

groupBy

groupBy()把集合的元素按照key歸類,key由傳入的函數(shù)返回:

'use strict';

var scores = [20, 81, 75, 40, 91, 59, 77, 66, 72, 88, 99];
var groups = _.groupBy(scores, function (x) {
    if (x < 60) {
        return 'C';
    } else if (x < 80) {
        return 'B';
    } else {
        return 'A';
    }
});

// 結(jié)果:
// {
//  A: [81, 91, 88, 99],
//  B: [75, 77, 66, 72],
//  C: [20, 40, 59]
//  }

可見groupBy() 用來分組是非常方便的娩脾。

<p>
</br>

shuffle / sample

shuffle() 用洗牌算法隨機(jī)打亂一個(gè)集合:

'use strict';

// 注意每次結(jié)果都不一樣:
_.shuffle([1, 2, 3, 4, 5, 6]);  // [3, 5, 4, 6, 2, 1]

sample()則是隨機(jī)選擇一個(gè)或多個(gè)元素:

'use strict';

// 注意每次結(jié)果都不一樣:
// 隨機(jī)選1個(gè):
_.sample([1, 2, 3, 4, 5, 6]);  // 2
// 隨機(jī)選3個(gè):
_.sample([1, 2, 3, 4, 5, 6], 3);  // [6, 1, 4]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赵誓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌俩功,老刑警劉巖幻枉,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異诡蜓,居然都是意外死亡熬甫,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門万牺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來罗珍,“玉大人,你說我怎么就攤上這事脚粟「埠担” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵核无,是天一觀的道長(zhǎng)扣唱。 經(jīng)常有香客問我,道長(zhǎng)团南,這世上最難降的妖魔是什么噪沙? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮吐根,結(jié)果婚禮上正歼,老公的妹妹穿的比我還像新娘。我一直安慰自己拷橘,他們只是感情好局义,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著冗疮,像睡著了一般萄唇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上术幔,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天另萤,我揣著相機(jī)與錄音,去河邊找鬼诅挑。 笑死四敞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拔妥。 我是一名探鬼主播忿危,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼毒嫡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤兜畸,失蹤者是張志新(化名)和其女友劉穎努释,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咬摇,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伐蒂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肛鹏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逸邦。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖在扰,靈堂內(nèi)的尸體忽然破棺而出缕减,到底是詐尸還是另有隱情,我是刑警寧澤芒珠,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布桥狡,位于F島的核電站,受9級(jí)特大地震影響皱卓,放射性物質(zhì)發(fā)生泄漏裹芝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一娜汁、第九天 我趴在偏房一處隱蔽的房頂上張望嫂易。 院中可真熱鬧,春花似錦掐禁、人聲如沸怜械。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宫盔。三九已至,卻和暖如春享完,著一層夾襖步出監(jiān)牢的瞬間灼芭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國打工般又, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留彼绷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓茴迁,卻偏偏與公主長(zhǎng)得像寄悯,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子堕义,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容