數(shù)組方法(filter、map、some...)

數(shù)組是我們在js中常常要用到的,但是你真的熟悉數(shù)組的方法嗎?今天我就總結(jié)一下Array對象具有哪些方法。

聲明數(shù)組:

var list = new Array()

list[0] = 0;

list[1] = 1;

list[2] = 2;

或者這樣聲明:var list = [0,1,2]

或者var d = Array.of(1,2,3); ? ? ?console.log(d) ? ? ? [1,2,3]

(1)基本的數(shù)組方法

unshift:向數(shù)組開頭增加一項 ,返回值是數(shù)組的新長度 , 直接在原數(shù)組上操作的,不生成新數(shù)組

push:向數(shù)組的末尾增加一項 ,返回值是數(shù)組的新長度 , 直接在原數(shù)組上操作的,不生成新數(shù)組

shift : 刪除數(shù)組開頭項 ,返回被刪除的項?,直接在原數(shù)組上操作的,不生成新數(shù)組

pop : 刪除數(shù)組的末尾項, 返回被刪除的項?,直接在原數(shù)組上操作的,不生成新數(shù)組

includes? ? [1,2,3].includes(2);//true? ??[1,2,3].includes(4);//false

indexof??

var beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];

? ? ?console.log(beasts.indexOf('bison'));

? ? // expected output: 1

? ? // start from index 2

? ? ?console.log(beasts.indexOf('bison', 2));

? ? // expected output: 4

? ? console.log(beasts.indexOf('giraffe'));

? ?// expected output: -1

splice(2,3) :從下標為2(包含2)的項開始切取3項;如果只傳一個參數(shù)那就是切到最后??

splice(start,deleteCount,val1,val2,...):從start位置開始刪除deleteCount項,并從該位置起插入val1,val2,... (切除并插值)

? ? ? ? ? ?直接在原數(shù)組上操作的,返回值是切下的元素新組成的數(shù)組

var a = [1,2,3,4,5,6,7,8]; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?var a = [1,2,3,4,5,6,7,8]; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? var a = [1,2,3,4,5,6,7,8];

var b = a.splice(2,3); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? var b = a.splice(2,3,9,10); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? var b = a.splice(2);

console.log(a)? ? ? ? [1,2,6,7,8] ? ? ? ? ? ? ? ? ? ? console.log(a)? ? ? ? [1,2,9,10,6,7,8] ? ? ? ? ? ? ? ? ? console.log(a)? ? ? ? [1,2]

console.log(b)? ? ? ? [3,4,5] ? ? ? ? ? ? ? ? ? ? ? ? ? console.log(b)? ? ? ? [3,4,5] ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? console.log(b)? [3,4,5,6,7,8]

slice (2,4):從下標為2(包含2)的項開始切,直到下標為4停止(不包含4),如果只傳一個參數(shù)那就是切到最后

? ? ? ? ? ? 原數(shù)組不變,返回值是切下的元素新組成的數(shù)組

var a = [1,2,3,4,5,6,7,8];? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? var a = [1,2,3,4,5,6,7,8];

var b = a.slice(2,4); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? var b = a.slice(2);

console.log(a) ? ? ? ?[1,2,3,4,5,6,7,8]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?console.log(a)? ? ? ? [1,2,3,4,5,6,7,8]

console.log(b)? ? ? ? [3,4] ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? console.log(b)? ? ? ? [3,4,5,6,7,8]

concat:把一個數(shù)組和另一個數(shù)組拼接在一起 返回拼接好的數(shù)組? ? ? ? 原數(shù)組不變,返回新的數(shù)組

var a = [1,2,3,4,5,6,7,8];

var b = [9,10,11];

var c = a.concat(b);

console.log(a)? ? ? ? ? ? ? ? ? ? [1,2,3,4,5,6,7,8]

console.log(b)? ? ? ? ? ? ? ? ? ? [9,10,11]

console.log(c)? ? ? ? ? ? ? ? ? ? [1,2,3,4,5,6,7,8,9,10,11]

join:?把數(shù)組中的每一項 按照指定的分隔符拼接成字符串

? ? ? ? ??原數(shù)組不變,返回新的數(shù)組

var a = [1,2,3,4,5,6,7,8];? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? var a = [1,2,3,4,5,6,7,8];

var c = a.join('');? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? var c = a.join('|');

console.log(a)? ? ? ? ? ? ? ? ? ? [1,2,3,4,5,6,7,8]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? console.log(a)? ? ? ? ? ? ? ? ? ? [1,2,3,4,5,6,7,8]

console.log(c)? ? ? ? ? ? ? ? ? ? 12345678? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? console.log(c)? ? ? ? ? ? ? ? ? ? 1|2|3|4|5|6|7|8

reverse:將數(shù)組反序

? ? ? 原數(shù)組改變,返回新的數(shù)組就是反序后的數(shù)組

var a = [1,2,3,4,5];

var b = a.reverse();

console.log(a) ? ? [5,4,3,2,1]?

console.log(b) ? ? ?[5,4,3,2,1]

toString: 可把數(shù)組轉(zhuǎn)換為字符串,并返回結(jié)果

var a = [1,2,3,4,5];

var b = a.toString();

console.log(a) ? ? ?[1,2,3,4,5]

console.log(b) ? ? ?1,2,3,4,5

sort(orderfunction):方法將數(shù)組中的元素排序并返回排序后的數(shù)組

? ? ? ?原數(shù)組也改變,返回重新排序后的新數(shù)組

var a = [9,2,4,3,5,8,7,6];

var c = a.sort();

console.log(a) ? ? ?[2, 3, 4, 5, 6, 7, 8, 9]

console.log(c)? ? ? [2, 3, 4, 5, 6, 7, 8, 9]

當不帶參數(shù)時,默認按照順序排序,也就是從小到大。當然,也可以直接給sort加一個比較函數(shù)比較

var ? ?arr = [1,4,7];

arr.sort();

console.log(arr);//[1,4,7]

arr.sort(function(a,b){

? ? ? ? ?returna-b;//從小到大

});

console.log(arr);//[1,4,7]

arr.sort(function(a,b){

? ? ? ? ? returnb-a;//從大到小

});

console.log(arr);//[7,4,1]

varnum =newArray('one','three','Six','Five');

num.sort();//區(qū)分大小寫排序

console.log(num);// ["Five", "Six", "one", "three"]

num.sort(function(s,t){

? ? ? ? ?vara = s.toLowerCase();

? ? ? ? ?varb = t.toLowerCase();

? ? ? ? ?if(a<b) return ?-1

? ? ? ? ?if(a>b) return 1;

? ? ? ? ? return0;

});

console.log(num);// ["Five", "one", "Six", "three"]


2)ECMAScript5中的數(shù)組方法

這一類數(shù)組方法大多數(shù)有統(tǒng)一大致的規(guī)則。它們都不會修改原始數(shù)組。

大多數(shù)方法的第一個參數(shù)接收一個函數(shù),并且對數(shù)組的每個元素(或一些元素)調(diào)用一次該函數(shù)。

如果是稀疏數(shù)組,對不存在的元素不調(diào)用傳遞的函數(shù);

在大多數(shù)情況下,調(diào)用的這個函數(shù)一般使用三個參數(shù):數(shù)組元素、元素的索引、數(shù)組本身。通常后兩個參數(shù)也不需要填寫進去。

除了這里第一個參數(shù)(函數(shù))之外,還有第二個參數(shù)(它是可選的),如果第二個參數(shù)存在,則調(diào)用的函數(shù)將被看做是第二個參數(shù)的方法。

也就是說,在調(diào)用函數(shù)時傳遞進去的第二個參數(shù)作為它的this關(guān)鍵字的值來使用。

1.forEach()

這個方法從頭至尾遍歷數(shù)組,為每個數(shù)組調(diào)用指定的函數(shù)。

var ?data = [1,2,3,4,5];

var ?sum = 0;

data.forEach(function(value){//只使用了第一個參數(shù)(函數(shù)),調(diào)用的函數(shù)也只使用了第一個參數(shù)數(shù)組元素

? ? ? ? ?sum += value;

});

console.log(sum); ? ? ? ? ?//15

console.log(data); ? ? ? ? ?// [1, 2, 3, 4, 5]

var ? data = [1,2,3,4,5];

var ? sum = 0;

data.forEach(function(value,item,data){//調(diào)用的函數(shù)具有了三個參數(shù)

? ? ? ? data[item] = value*value;//取平方

});

console.log(data); ? ? ? ?// [1, 4, 9, 16, 25]

2.map()

這個方法將調(diào)用的數(shù)組中每個元素傳遞給指定的函數(shù),并返回一個數(shù)組,它包含這個函數(shù)的返回值。

var ? ?data = [1,2,3,4,5];

var ? ?data1 = data.map(function(value){

? ? ? ? return++ value;

});

console.log(data); ? ? ? ? ?// [1, 2, 3, 4, 5]

console.log(data1); ? ? ? ?// [2, 3, 4, 5, 6]

3.filter()

這個方法返回的數(shù)組元素是調(diào)用的數(shù)組的一個子集。傳遞的函數(shù)是用來邏輯判定的,該函數(shù)返回true或false。

如果返回值是true或者能轉(zhuǎn)化為true的值,那么傳遞給判定函數(shù)的元素就是這個子集的成員,它將被添加到一個作為返回值的數(shù)組中。

var ? ?data = [1,2,3,4,5];

var ? ?data1 = data.filter(function(value){

? ? ? ? returnvalue <= 3;

});

vardata2 = data.filter(function(value){

? ? ? ? returnvalue > 3;

});

console.log(data); ? ? ? ? ?// [1, 2, 3, 4, 5]

console.log(data1); ? ? ? ?// [1,2,3]

console.log(data2); ? ? ? ?// [4,5]

4.every()和some()

顧名思義,every()就是數(shù)組中所以元素都滿足函數(shù)指定的條件時 返回true; some()就是某一項滿足時就返回 true

var ? ?data = [1,2,3,4,5];

var ? ?data1 = data.every(function(value){

? ? ? ? returnvalue < 4;

});

var ? ?data2 = data.some(function(value){

? ? ? ? returnvalue >4;

});

console.log(data); ? ? ? ?// [1, 2, 3, 4, 5]

console.log(data1); ? ? ?// false

console.log(data2); ? ? ?// true

5.reduce()和reduceRight()

這兩個方法使用指定的函數(shù)將數(shù)組元素進行組合,生成單個值。

reduce()有兩個參數(shù)。第一個是執(zhí)行化簡操作的函數(shù),就是說用某種方法把兩個值化簡為一個值,并返回化簡后的值。

第二個參數(shù)可選,用來傳遞給第一個參數(shù)函數(shù)作為初始值。如果第二個參數(shù)沒有,則初始值就使用數(shù)組的第一個元素值。

var ? ?data = [1,2,3,4,5];

var ? ?sum = data.reduce(function(a,b){

? ? ? ? returna+b;

});

varsum1 = data.reduce(function(a,b){

? ? ? ? returna+b;

},5);

var ? ?min = data.reduce(function(a,b){

? ? ? ? return(a

});

console.log(data); ? ? ? ? ?// [1, 2, 3, 4, 5]

console.log(sum); ? ? ? ? ?// 15

console.log(sum1); ? ? ? ?// 20

console.log(min);// 1

sum中沒有第二個參數(shù),所以初始值為第一個數(shù)組元素,第一步1+2=3,第二步3+3=6... 最后得15

sum1中有第二個參數(shù),所以初始值為5,第一步5+1=6,第二步6+2=8... 最后得20

reduceRight()和reduce()差不多,不同的是它按照數(shù)組索引從高到低(從右到左)處理數(shù)組,而不是正常的從低到高。

var ? ?data = ['a','b','c'];

var ? ?str = data.reduce(function(x,y){//順序

? ? ? ? returnx+y;

});

var ? ?str1 = data.reduceRight(function(x,y){//逆序

? ? ? ? returnx+y;

});

console.log(data); ? ? ? ?// [1, 2, 3]

console.log(str); ? ? ? ? ? //"abc"

console.log(str1); ? ? ? ? //"cba"

6.indexOf()和lastIndexOf()

這個方法搜索整個數(shù)組中具有給定值的元素,返回找到的元素的索引(找到了一個就退出了),沒有找到則返回-1.

一個從頭至尾,一個從尾至頭

var ? ?data = ['a','b','a','c','a'];

console.log(data.indexOf('a')); ? ? ? ? ? ? ? ? ? ? ? ? ? ? //0

console.log(data.indexOf('d')); ? ? ? ? ? ? ? ? ? ? ? ? ? ? //-1

console.log(data.lastIndexOf('a')); ? ? ? ? ? ? ? ? ? ? ? //4

console.log(data.lastIndexOf('a',-2)); ? ? ? ? ? ? ? ? ? //2 從倒數(shù)第二個開始

console.log(data.lastIndexOf('a',1)); ? ? ? ? ? ? ? ? ? ?//0? 從順序第二個往前

7.數(shù)組類型 isArray()

判斷一個對象是不是數(shù)組

console.log(Array.isArray([])); ? ? ? ? ? ? ? ? ? ? //true

console.log(Array.isArray({})); ? ? ? ? ? ? ? ? ? ?//false

//模擬上邊的

varisArray1 = Function.isArray||function(o){

? ? ? ? returntypeofo ==="object"&&

? ? ? ? Object.prototype.toString.call(o) ==="[object Array]";

};

console.log(isArray1([])); ? ? ? ? ? ? ? ? ? ? ? //true

console.log(isArray1({})); ? ? ? ? ? ? ? ? ? ? ?//false

8.數(shù)組includes()

判斷數(shù)組是否包含某個元素,如果包含則返回true,不包含返回false

var a = [9,2,4,3,5,6,7,8];

var c = a.includes(3);

console.log(a)? ? ? ? ? ? ? ? ? [9,2,4,3,5,6,7,8]? ? ? ?

console.log(c) ? ? ? ? ? ? ? ? ? true

9.數(shù)組find()

Array.find(function(v,i,arr),thisArgs}

數(shù)組實例的find方法,用于找出第一個符合條件的數(shù)組成員。它的參數(shù)是一個回調(diào)函數(shù),所有數(shù)組成員依次執(zhí)行該回調(diào)函數(shù),直到找出第一個返回值為true的成員,然后返回該成員。如果沒有符合條件的成員,則返回undefined。

v:數(shù)組值

i:索引

arr:當前數(shù)組

thisArgs:fn函數(shù)中this指向

var ?re?= [1,2,3,4].find(function(v,i,arr){

? ? ? ? console.log(arr); ? ? ? ? ? ? ? ? ? ?//[1,2,3,4]

? ? ? ? console.log(this); ? ? ? ? ? ? ? ? ?//{this: 'this'}

? ? ? ? returnv>=2;

},{this:'this'})

console.log(re); ? ? ? ? ? ? ? ? ? ? ? ? ? ??//2

var ?re2 = [1,2,3,4].find(function(v,i,arr){

? ? ?console.log(this); ? ? ? ? ? ? ? ? ? ?//{0: "_", 1: "t", 2: "h", 3: "i", 4: "s", length: 5}

? ? ?returnv>=10;

},'_this')

console.log(re2); ? ? ? ? ? ? ? ? ? ? ? ? ?//undefined


Object

obj= {

? ? ? ? "aa" :? 123,

? ? ? ? "bb" :? ?564,

? ? ? ? "cc" :? ?989

}

var? keysArr = Object.keys(obj)? ? ? ? //返回一個包含對象key值的數(shù)組

console.log(keysArr)? ? ? ? ? ? ?//? ?['aa' , 'bb' ,'cc']


循環(huán)對象
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374