js數(shù)組拓展

  • Array.isArray(obj)

這是Array對象的一個靜態(tài)函數(shù),用來判斷一個對象是不是數(shù)組

var a = [1,2,3];
var b = new Date();
console.log(Array.isArray(a)); //true
console.log(Array.isArray(b)); //false
  • indexOf

indexOf方法返回給定元素在數(shù)組中第一次出現(xiàn)的位置衙解,如果沒有出現(xiàn)則返回-1粗卜。
indexOf方法還可以接受第二個參數(shù),表示搜索的開始位置。

var a = ['a', 'b', 'c'];
console.log(a.indexOf('b')) // 1
console.log(a.indexOf('y')) // -1
['a', 'b', 'c'].indexOf('a', 1) // -1    從1號位置開始搜索字符a踱启,結(jié)果為-1,表示沒有搜索到研底。
  • lastIndexOf

lastIndexOf方法返回給定元素在數(shù)組中最后一次出現(xiàn)的位置埠偿,如果沒有出現(xiàn)則返回-1。

var a = [1,2,3,3,2,1]
console.log(a.indexOf(2)) //1
console.log(a.lastIndexOf(2)) //4

注意榜晦,這兩個方法不能用來搜索NaN的位置冠蒋,即它們無法確定數(shù)組成員是否包含NaN。

  • map

map方法將數(shù)組的所有成員依次傳入?yún)?shù)函數(shù)乾胶,然后把每一次的執(zhí)行結(jié)果組成一個新數(shù)組返回抖剿。

var a = [1, 2, 3, 4, 5, 6]
console.log(a.map(function(e){
  return e * e
}))  // [1, 4, 9, 16, 25, 36]
console.log(a) //[1, 2, 3, 4, 5, 6]

上面代碼中,a數(shù)組的所有成員依次執(zhí)行參數(shù)函數(shù)识窿,運行結(jié)果組成一個新數(shù)組返回斩郎,原數(shù)組沒有變化。

map方法接受一個函數(shù)作為參數(shù)喻频。該函數(shù)調(diào)用時缩宜,map方法向它傳入三個參數(shù):當前成員、當前位置和數(shù)組本身。

[1, 2, 3].map(function(elem, index, arr) {
  return elem * index;
});
// [0, 2, 6]

上面代碼中锻煌,map方法的回調(diào)函數(shù)有三個參數(shù)妓布,elem為當前成員的值,index為當前成員的位置宋梧,arr為原數(shù)組([1, 2, 3])匣沼。

  • forEach

forEach也是對數(shù)組的所有成員依次執(zhí)行參數(shù)函數(shù)。遍歷數(shù)組乃秀,參數(shù)為一個回調(diào)函數(shù)肛著,回調(diào)函數(shù)有三個參數(shù):
1.當前元素
2.當前元素索引值
3.整個數(shù)組

var a = [1,2,3,4,5,6];
console.log(a.map(function(e){return e+1}));//[2, 3, 4, 5, 6, 7]
console.log(a); //[1, 2, 3, 4, 5, 6];
a.forEach(function(e,i,array){
    array[i]= e + 1;
});
console.log(a); //[2, 3, 4, 5, 6, 7]

forEach方法不返回值,只用來操作數(shù)據(jù)跺讯。這就是說枢贿,如果數(shù)組遍歷的目的是為了得到返回值,那么使用map方法刀脏,否則使用forEach方法

  • every()局荚、some()

返回布爾值诱建,表示判斷數(shù)組成員是否符合某種條件栈戳。
它們接受一個函數(shù)作為參數(shù)魏保,所有數(shù)組成員依次執(zhí)行該函數(shù)黍檩。該函數(shù)接受三個參數(shù):當前成員、當前位置和整個數(shù)組渣磷,然后返回一個布爾值厉膀。

some方法是只要一個成員的返回值是true兰吟,則整個some方法的返回值就是true杭跪,否則返回false仙逻。

every方法是所有成員的返回值都是true,整個every方法才返回true涧尿,否則返回false系奉。

var a = [1, 2, 3, 4, 5, 6]
console.log(a.every(function(e, i, arr){
return e < 5
}))        //false
console.log(a.some(function(e,i,arr){
  return e > 4
}))        //true
  • filter

filter方法用于過濾數(shù)組成員,滿足條件的成員組成一個新數(shù)組返回姑廉。
它的參數(shù)是一個函數(shù)缺亮,所有數(shù)組成員依次執(zhí)行該函數(shù),返回結(jié)果為true的成員組成一個新數(shù)組返回桥言。該方法不會改變原數(shù)組萌踱。

var a = [1, 2, 3, 4, 5, 6]
console.log(a.filter(function(e){
  return e % 2 == 0;
}))             // [2, 4, 6]
console.log(a) //[1, 2, 3, 4, 5, 6]
  • reduce、reduceRight

reduce方法和reduceRight方法依次處理數(shù)組的每個成員号阿,最終累計為一個值虫蝶。
reduce是從左到右處理(從第一個成員到最后一個成員),reduceRight則是從右到左(從最后一個成員到第一個成員)倦西。
有兩個參數(shù):
1.回調(diào)函數(shù):把兩個值合為一個,返回結(jié)果
2.value赁严,一個初始值,可選

[1, 2, 3, 4, 5].reduce(function (a, b) {
  console.log(a, b);
  return a + b;
})
// 1 2
// 3 3
// 6 4
// 10 5
//最后結(jié)果:15

上面代碼中扰柠,reduce方法求出數(shù)組所有成員的和粉铐。第一次執(zhí)行,a是數(shù)組的第一個成員1卤档,b是數(shù)組的第二個成員2蝙泼。第二次執(zhí)行,a為上一輪的返回值3劝枣,b為第三個成員3汤踏。第三次執(zhí)行,a為上一輪的返回值6舔腾,b為第四個成員4溪胶。第四次執(zhí)行,a為上一輪返回值10稳诚,b為第五個成員5哗脖。至此所有成員遍歷完成,整個方法的返回值就是最后一輪的返回值15扳还。

var a = [1, 2, 3, 4, 5, 6]
var b = a.reduce(function(v1, v2){ return v1 + v2 }, 100)
console.log(b) // 121

上面代碼指定參數(shù)a的初值為100才避,所以數(shù)組從100開始累加,最終結(jié)果為121氨距。注意桑逝,這時b是從數(shù)組的第一個成員開始遍歷。

圖片源于知乎@水乙

參考鏈接


以上大量參考 Array 對象

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末俏让,一起剝皮案震驚了整個濱河市楞遏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舆驶,老刑警劉巖橱健,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異沙廉,居然都是意外死亡拘荡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門撬陵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來珊皿,“玉大人,你說我怎么就攤上這事巨税◇ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵草添,是天一觀的道長驶兜。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么抄淑? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任屠凶,我火速辦了婚禮,結(jié)果婚禮上肆资,老公的妹妹穿的比我還像新娘矗愧。我一直安慰自己,他們只是感情好郑原,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布唉韭。 她就那樣靜靜地躺著,像睡著了一般犯犁。 火紅的嫁衣襯著肌膚如雪属愤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天栖秕,我揣著相機與錄音春塌,去河邊找鬼。 笑死簇捍,一個胖子當著我的面吹牛只壳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播暑塑,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼吼句,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了事格?” 一聲冷哼從身側(cè)響起惕艳,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎驹愚,沒想到半個月后远搪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡逢捺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年谁鳍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劫瞳。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡倘潜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出志于,到底是詐尸還是另有隱情涮因,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布伺绽,位于F島的核電站养泡,受9級特大地震影響嗜湃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瓤荔,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一净蚤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧输硝,春花似錦、人聲如沸程梦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽屿附。三九已至郎逃,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間挺份,已是汗流浹背褒翰。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留匀泊,地道東北人优训。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像各聘,于是被迫代替她去往敵國和親揣非。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360