js數(shù)組常用方法QIan鋒逆戰(zhàn)

數(shù)組的方法


arr.slice(start帚呼,end)

按指定位置截取復(fù)制數(shù)組的內(nèi)容,返回新數(shù)組经磅,不會改變原數(shù)組

從下標(biāo)start開始名惩,截取到end澎胡,包括start但不包括end

第二個參數(shù)不寫,默認(rèn)截取到尾部,只能從前向后截取

var?arr1=arr.slice(1,4);??????? ?//?從第1位開始截取到第4位之前

var?arr1=arr.slice(); // 復(fù)制數(shù)組arr

var?arr1=arr.slice(0);? // 復(fù)制數(shù)組

var?arr1=arr.slice(3); //從第三位截取到尾部復(fù)制

var?arr1=arr.slice(-2); //從倒數(shù)第二位開始截取到尾部

var?arr1=arr.slice(-3,-1); //從倒數(shù)第三位到倒數(shù)第一位




arr.indexOf(要查詢得元素,從什么位置開始查詢)??位置就是下標(biāo)

在數(shù)組中查找元素攻谁,找到返回元素下邊稚伍,找不到返回-1,查詢到第一個后巢株,就返回下標(biāo)不再繼續(xù)查詢

var??index=arr.indexOf(4); ?//?在數(shù)組中查找元素4槐瑞,如果查找到,返回該元素所在的下標(biāo)阁苞,如果沒有查找到困檩,則返回-1


var?arr=[

??????{a:1},

??????{a:2},

??????{a:3},

???? ?{a:4}

];

var?index=arr.indexOf({a:1}); ?? ?//?這是錯誤得,查找不到那槽,因為查找得是新對象 ?地址不同




Array.from(類似于數(shù)組的列表)??轉(zhuǎn)為數(shù)組

//?根據(jù)標(biāo)簽名獲取到標(biāo)簽列表 (獲取到的是列表悼沿,不是數(shù)組,不能直接使用數(shù)組的方法)

var?divs=document.getElementsByTagName("div");

divs.pop()骚灸; //錯誤糟趾,不是數(shù)組不能直接使用數(shù)組的方法

var?arr=Array.from(divs); //ES6?的寫法 ?把divs這個列表 轉(zhuǎn)為數(shù)組

?????? //ES5 ??=> ???var?arr=Array.prototype.slice.call(divs);



????????var?divs=document.getElementsByTagName("div");

????????var?arr=Array.from(divs);

????????for(var?i=0;i<arr.length;i++){

????????????arr[i].onclick=clickHandler;

????????}

????????function?clickHandler(){

????????????console.log(this); //?在點擊事件調(diào)用得函數(shù)中,this就是被點擊得元素(不精準(zhǔn)得)

????????????var?index=arr.indexOf(this);

????????????console.log(index);? //?這樣就可以判斷點擊得是列表中得第幾個元素??

????????}






------------使用 indexOf 查詢到數(shù)組中所有的為3的元素

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

???????var?index=arr.indexOf(3); // 這樣 只能查詢到第一個3 (下標(biāo)為1)

???????console.log(index);

???????var?index=arr.indexOf(3,2); // 這樣 只能查詢到第二個3 (下標(biāo)為4)

???????console.log(index);


??????? var?index=0; // 使用循環(huán)甚牲,查詢到數(shù)組中所有為3的元素义郑,并打印下標(biāo)

????????while(true){

????????????index=arr.indexOf(3,index);

????????????console.log(index);

????????????if(index===-1)?break; // 查詢到最后,查不到時返回-1 ?如果為-1 跳出循環(huán)丈钙,不再查詢

????????????index++;

????????}




lastIndexOf(查找得元素非驮,從什么位置開始查找) ??從后向前查找

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

var?index=arr.lastIndexOf(3);

console.log(index); // 打印下標(biāo) 7



—————————— ??第三種?去重??方法 ?———————————

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

????????var?arr1=[];

????????for(var?i=0;i<arr.length;i++){

????????????if(arr1.indexOf(arr[i])===-1){ // 如果再arr1 數(shù)組中 查詢不到 arr [ i ] , 表示這個元素不在arr1 數(shù)組中

????????????????arr1.push(arr[i]); // 那么將這個元素插入到arr1 數(shù)組中

????????????}

????????}

????????console.log(arr1);?





遍歷數(shù)組(forEach 和 map)

?arr.forEach(function(數(shù)組中的元素,每個元素對應(yīng)的下標(biāo)雏赦,數(shù)組自身){?})

???var?arr=[1,2,3,5,6,7,8,9];

???arr.forEach(function(a,b,c){

?????????console.log(a,b,c);

????????})



?//?求數(shù)組中所有元素的和

//??———使用for循環(huán)遍歷數(shù)組

??????? var?sum=0;

????????for(var?i=0;i<arr.length;i++){

????????????sum+=arr[i];

????????}

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



????????//??———?forEach 遍歷數(shù)組

????????var?sum=0;

????????arr.forEach(function(item){

????????????sum+=item;

????????})

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




var?arr=[1,2,3,5,,6,7,8,9];

?arr.forEach(function(item,index){ ?//?使用forEach可以跳過空元素

???????console.log(item,index);

????????})



????????var?arr1=[];

????????arr.forEach(function(item,index){ // 保留空元素

????????????arr1[index]=item;

????????})

????????console.log(arr1);?




arr.map(function(item,index,arr){ })

map會返回一個與原數(shù)組長度相等的新數(shù)組


????????var?arr=[3,5,7,9,1,2,4];

????????var?arr2=arr.map(function(item,index,arr){

????????????//?console.log(item,index,arr);

????????????//?return?"a";

????????????return?item+10; ?//?在map中使用return?就是在對應(yīng)的下標(biāo)中添加對應(yīng)的數(shù)據(jù)

????????});

????????console.log(arr2);



forEach沒有返回值劫笙,使用return無效

map 有返回值,與原數(shù)組等長的新數(shù)組星岗,元素內(nèi)容由return確定填大,不寫return返回undefined

forEach 和 map 都不會遍歷空元素??




// 遍歷數(shù)組arr,將大于4的元素生成一個新的數(shù)組(新數(shù)組中會有undefined)

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

????????var?arr1=arr.map(function(item){

????????????if(item>4){

????????????????return?item;

????????????}

????????});

????????console.log(arr1);?



????????var?arr=[ // 元素是對象的數(shù)組

????????????{id:1001,name:"電視",price:4500},

????????????{id:1002,name:"電腦",price:6500},

????????????{id:1003,name:"冰箱",price:2000},

????????????{id:1004,name:"洗衣機",price:1000},

????????????{id:1005,name:"手機",price:5500}

????????];

// 使用 forEach 實現(xiàn)給數(shù)組添加 數(shù)量和總價屬性及值

?????? ?????arr.forEach(function(item){ // 遍歷 arr 數(shù)組俏橘,給元素添加 num 屬性

????????????item.num=parseInt(Math.random()*9+1); // 給num屬性賦值 隨機數(shù) 1-10

????????????item.total=item.price*item.num; // 給元素添加 total屬性 ?屬性值為 單價*數(shù)量

????????})

????????console.log(arr);

// 使用 map 實現(xiàn)給數(shù)組添加 數(shù)量和總價屬性及值

?????? ?????var?arr1=arr.map(function(item){ // 創(chuàng)建一個遍歷 arr1 承接map遍歷后 返回的數(shù)組

????????????item.num=parseInt(Math.random()*9+1);

????????????item.total=item.price*item.num;

????????????return?item; // 給每個map遍歷的元素添加內(nèi)容允华,item

????????})

????????console.log(arr1,arr);? // 每個元素都是對象 ?有引用關(guān)系,會改變原數(shù)組



???//?不改變原數(shù)組寥掐,完成一個新數(shù)組例获,里面有num和總價

????????var?arr1=arr.map(function(item){

????????????var?o={};

????????????for(var?prop?in?item){ // 把對象元素 復(fù)制出來 給到o ???

????????????????o[prop]=item[prop]; // 在將o對象當(dāng)作arr1數(shù)組中的元素 ?切斷通過遍歷過來的元素對象的引用關(guān)系

????????????}

????????????o.num=parseInt(Math.random()*9+1);

????????????o.total=o.price*o.num;

????????????return?o;

????????})


????????console.log(arr1,arr);





時間復(fù)雜度算法計算花費時間??花時間越少時間復(fù)雜度越小

空間復(fù)雜度算法計算需要花費堆棧空間(內(nèi)存)越多代表空間復(fù)雜度越高



冒泡排序??????

???????? ???var?arr=[4,2,7,2,5,8,0,4,5,7,3,8,9];

????? ??????function?sorts(arr){

????????????var?len=arr.length-1;

????????????for(var?i=0;i<len;i++){? ?//?i?的目是控制循環(huán)次數(shù) ?

????????????????for(var?j=0;j<len-i;j++){ // ?j和j+1是前后數(shù)據(jù)比較

????????????????????if(arr[j]>arr[j+1]){

????????????????????????var?temp=arr[j+1]; // j 和 j+1 比較 滿足條件 進行交換

????????????????????????arr[j+1]=arr[j];

????????????????????????arr[j]=temp;

????????????????????}

????????????????}

????????????}

????????}

????????sorts(arr);

????????console.log(arr);?



arr.sort(); ???? 排序曹仗,僅能10以內(nèi)數(shù)字 ?缺點:按字符排序

arr.sort(function(后一項,前一項){}) ?僅適用于數(shù)值


arr.sort(function(a,b){ ?????

????????return??a-b; //??從小到大???

????????return??b-a蠕搜; // ?從大到小????


arr.sort(function(a,b){ // 將字符排序

?????????console.log(a.charCodeAt(0),b.charCodeAt(0)); // str.charCodeAt(0) => 將str字符串的第0項轉(zhuǎn)換為Unicode編碼

?????????return?a.charCodeAt(0)-b.charCodeAt(0); //?a-z

?????????return?b.charCodeAt(0)-a.charCodeAt(0); //?z-a

????????})



arr.sort(function(){ // 數(shù)組元素隨機亂序

????? ?return?Math.random()-0.5;

?});





arr.some(function(item,index,arr){??});

判斷數(shù)組中是否存在滿足條件的元素怎茫,如果有就返回true,如果沒有就返回false

遍歷數(shù)組,如果有一個滿足條件的元素轨蛤,都會直接返回true蜜宪,不繼續(xù)向后遍歷


var?arr=[1,4,6,2,7,9,0];

var?bool=arr.some(function(item,index,arr){ // 遍歷數(shù)組,是否存在大于5的元素

???????return?item>5;

});

console.log(bool);




????????//? 重構(gòu)some橋接模式

??????? ????function?somes(arr,fn){ ?//?fn就是回調(diào)函數(shù)

????????????for(var?i=0;i<arr.length;i++){

???????????????var?bool=fn(arr[i],i,arr); // 通過循環(huán)遍歷傳入的數(shù)組祥山,并回調(diào)條件函數(shù) 將回調(diào)函數(shù)的返回值賦值給bool 并最終返回出去

???????????????if(bool)?return?true;

????????????}

????????????return?false;

????????}


???????var?b=somes(arr,abc);

???????function?abc(item,index,arr){

????????????return?item>5;

????????}

????????console.log(b);?


var?bool=arr.every(function(item,index,arr){??});

判斷數(shù)組中是否每一個都滿足條件圃验,如果有一個不滿足條件,直接跳出缝呕,所有都滿足時返回為ture


var?bool=arr.every(function(item,index,arr){ // 判斷數(shù)組中 是否所有的元素都大于2

????????return?item>2;

});

console.log(bool);?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末澳窑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子供常,更是在濱河造成了極大的恐慌摊聋,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栈暇,死亡現(xiàn)場離奇詭異麻裁,居然都是意外死亡,警方通過查閱死者的電腦和手機源祈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門煎源,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人香缺,你說我怎么就攤上這事手销。” “怎么了赫悄?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵原献,是天一觀的道長。 經(jīng)常有香客問我埂淮,道長姑隅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任倔撞,我火速辦了婚禮讲仰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘痪蝇。我一直安慰自己鄙陡,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布躏啰。 她就那樣靜靜地躺著趁矾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪给僵。 梳的紋絲不亂的頭發(fā)上毫捣,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天详拙,我揣著相機與錄音,去河邊找鬼蔓同。 笑死饶辙,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的斑粱。 我是一名探鬼主播弃揽,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼则北!你這毒婦竟也來了矿微?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤咒锻,失蹤者是張志新(化名)和其女友劉穎冷冗,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惑艇,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蒿辙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了滨巴。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片思灌。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖恭取,靈堂內(nèi)的尸體忽然破棺而出泰偿,到底是詐尸還是另有隱情,我是刑警寧澤蜈垮,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布耗跛,位于F島的核電站,受9級特大地震影響攒发,放射性物質(zhì)發(fā)生泄漏调塌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一惠猿、第九天 我趴在偏房一處隱蔽的房頂上張望羔砾。 院中可真熱鬧,春花似錦偶妖、人聲如沸姜凄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽态秧。三九已至,卻和暖如春扼鞋,著一層夾襖步出監(jiān)牢的瞬間屿聋,已是汗流浹背空扎。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留润讥,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓盘寡,卻偏偏與公主長得像楚殿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子竿痰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

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