JavaScript之Array對(duì)象

總結(jié)


A:變異方法(會(huì)改變自身)

  • push pop unshift shift splice sort reverse
    這類是:增刪俐芯、排序(及反轉(zhuǎn))=>變異方法

B:遍歷方法遍歷前會(huì)確定遍歷訪問
但是遍歷時(shí)會(huì)過濾稀疏項(xiàng)(如內(nèi)部delete arr[i]涩澡,并不是改變遍歷訪問,只是跳過)
=> 增:不會(huì)遍歷到末尾項(xiàng)扳炬;刪:跳過划鸽,導(dǎo)致其實(shí)遍歷次數(shù)少了及皂;

  • forEach filter reduce sort map some every
  • 還有一些查找嘴办,內(nèi)部實(shí)現(xiàn)也是遍歷:可以認(rèn)為是filter 的簡化版(實(shí)現(xiàn)特定功能)
    非對(duì)象數(shù)組: indexOf/lastIndexOf/includes
    支持對(duì)象數(shù)組: find/findIndex

C:復(fù)制

  • slice concat/... filter map

一、增刪改查

1.增刪

1.棧方法(后進(jìn)后出)
push()   后增   let newArrLength=arr.push(element1, ..., elementN) ;//返回新數(shù)組長度
Array.prototype.push.apply(array1,array2);//簡化要先轉(zhuǎn)換成單個(gè)形參,這個(gè)時(shí)候就可以直接傳遞數(shù)組
//以下類似句喜,利用Array.prototype.XX.apply可以把形參為單個(gè)的预愤,可以轉(zhuǎn)化為傳數(shù)組

pop()    后刪   let deleteEle=arr.pop() ;//刪除最后一項(xiàng),并返回刪除項(xiàng)

2.隊(duì)列方法(先進(jìn)后出)
unshift()   前增     let newArrLength=arr.unshift(element1, ..., elementN);//返回新數(shù)組長度
Array.prototype.unshift.apply(array1,array2);//簡化要先轉(zhuǎn)換成單個(gè)形參咳胃,這個(gè)時(shí)候就可以直接傳遞數(shù)組

shift()     前刪     let deleteEle=arr.shift();//刪除第一項(xiàng)植康,并返回刪除項(xiàng)

3.指定位置增刪 
splice()   let deleteEle=arr.splice(start[,deleteCount[,item1[,item2[,...]]]]);//返回刪除項(xiàng)
//從start位置,刪除deleteCount個(gè)展懈,然后在start處插入item1...itemN

總結(jié):會(huì)修改自身销睁。刪除則返回刪除項(xiàng),增加則返回修改后的length 存崖。
     push/pop冻记、unshift/shift是通用方法,因?yàn)橐蕾噇ength來操作来惧,對(duì)象必須要有l(wèi)ength屬性

2.

1.自身復(fù)制黏貼:
copyWithin()   Withi  let newArr=arr.copyn(target[,start[,end]]);
//復(fù)制[start,end)左閉右開區(qū)間內(nèi)容到target為開始冗栗,覆蓋原來的值。返回新數(shù)組
//如果沒有end供搀,則復(fù)制為[start到尾部] 隅居。start和end都可以為負(fù)數(shù)
//復(fù)制黏貼是淺拷貝
                                                                
2.fill對(duì)象填充:
fill()     let newArr=arr.fill(value[, start[, end]]); 
//用value填充索引為[start,end)左閉右開的區(qū)間,value可以是對(duì)象葛虐。返回新數(shù)組

總結(jié):會(huì)修改自身胎源,但不改變數(shù)組length。都是返回新數(shù)組屿脐,都是淺拷貝 

3.

1.項(xiàng)查找  
includes    let bool=arr.includes(searchElement[,fromIndex]);//返回布爾值

2.查找指定元素的索引:
indexof     let index=arr.indexOf(searchElement[,fromIndex]);//返回索引值涕蚤,如果不存在,則返回-1
lastIndex    let index=arr.lastIndexOf(searchElement[,fromIndex = arr.length - 1]);//返回索引的诵,逆序查找

3.查找滿足測試函數(shù)  :
findIndex   let index=arr.findIndex(callback(element[,index[,array]])[,thisArg]);//返回索引
find        let ArrEle=arr.find(callback(element[,index[,array]])[,thisArg]);//返回項(xiàng)

總結(jié):都是查找到1個(gè)就結(jié)束 
includes查找項(xiàng)是專業(yè)的万栅,可以找到NaN和稀疏數(shù)組的undefined,indexof不可以 
但indexof/lastIndex可以獲得該項(xiàng)的索引
復(fù)雜查找用find/findIndex

二奢驯、迭代

1.every

測試數(shù)組中是否所有元素都通過了由提供的函數(shù)實(shí)現(xiàn)的測試都通過,返回true;如果有一個(gè)不通過,結(jié)束執(zhí)行,返回false

let bool=arr.every(callback(element[,index [,array]])[,objThis]);
//objThis作為參數(shù)1函數(shù)的this使用申钩,相當(dāng)于引入外部對(duì)象,返回布爾值

2.some

測試數(shù)組中是否至少有一個(gè)元素通過了由提供的函數(shù)實(shí)現(xiàn)的測試

let bool=arr.some(callback(element[,index [,array]])[,thisArg]);
//返回布爾值

3.filter

通過所提供函數(shù)實(shí)現(xiàn)的測試的所有元素次绘,返回子數(shù)組

let newArr=arr.filter(callback(element[,index[,array]])[,thisArg]);
//如果沒有符合條件的元素則返回空數(shù)組

4.map

舊數(shù)組每個(gè)元素執(zhí)行提供的函數(shù)得到新的元素瘪阁,返回新的數(shù)組,自身不改變

let newArr=arr.map(callback(element[,index[,array]])[,thisArg]);

5.forEach

舊數(shù)組每個(gè)元素執(zhí)行提供的函數(shù)得到新的元素邮偎,更新自身元素管跺,自身改變,無返回值

arr.forEach(callback(element[,index[,array]])[,thisArg]);

總結(jié):
every/some用于測試
filter用于返回舊數(shù)組滿足條件的新數(shù)組(舊數(shù)組子項(xiàng))
map用于返回舊數(shù)組映射后的新數(shù)組 //filter禾进、map都不會(huì)修改原數(shù)組
forEach用于修改自身數(shù)組

三豁跑、排序

1.reverse 反轉(zhuǎn)排序

arr.reverse();//修改自身,沒有返回值

2.sort 算法排序

arr.sort([sortby(L,R)]);
//沒有返回值泻云。如果沒有參數(shù):arr.sort();默認(rèn)情況為升序排序,按照字符編碼的順序進(jìn)行排序 
sortby(L,R);//是數(shù)組元素兩兩比較   排序規(guī)則為:return true或正數(shù)艇拍,則L狐蜕,R進(jìn)行調(diào)換排序 

四、歸并

數(shù)組元素兩兩比較卸夕,返回的值作為新的比較值层释,返回最終結(jié)果

1.reduce

let arrEle=arr.reduce(callback(accumulator,currentValue[,currentIndex][,array])[,initialValue]);
//initialValue為初始值

2.reduceRight

和reduce區(qū)別在于:reduce是從左到右,reduceRight是從右到左

五快集、生成新數(shù)組

都可以用于數(shù)組拷貝(通常用concat或slice(0))

1.concat

用于源數(shù)組連接其它元素/數(shù)組贡羔,返回新數(shù)組
該方法不會(huì)改變現(xiàn)有的數(shù)組,而僅僅會(huì)返回被連接數(shù)組的一個(gè)副本
可以用于數(shù)組拷貝

let newArr=arr.concat(arrayX,arrayX,......,arrayX);//arrayX可以是具體的值个初,也可以是數(shù)組(參數(shù)數(shù)組會(huì)拉平)
eg:
var arr=[1,2,3,4,5,6,7];
var addArr=[8,[9,10]];
var newArrCopy = arr.concat(addArr,11);
console.log(newArrCopy);// [1, 2, 3, 4, 5, 6, 7, 8, Array(2), 11]

//返回新數(shù)組乖寒,淺拷貝測試
var a={
    name:"張三"
}
var arr=[1,2,3,4,5,a,7];
var newArrCopy = arr.concat();
arr.pop();
arr[5].name="李四";
console.log(newArrCopy)//[1, 2, 3, 4, 5, {…}, 7]
//即arr和newArrCopy本身是淺拷貝,原數(shù)組pop不會(huì)影響新數(shù)組
//但原數(shù)組的項(xiàng)引用修改院溺,會(huì)影響新數(shù)組(淺拷貝)

2.slice

從已有的數(shù)組中返回選定的元素楣嘁。返回子數(shù)組
該方法并不會(huì)修改數(shù)組,而是返回一個(gè)子數(shù)組
可以用于數(shù)組拷貝

let newArr=arr.slice(start,end);//[start,end)左閉右開區(qū)間
//返回新數(shù)組覆获,淺拷貝測試
var a={
    name:"張三"
}
var arr=[1,2,3,4,5,a,7];
var newArrCopy = arr.slice(0);//start是必選的
arr.pop();
arr[5].name="李四";
console.log(newArrCopy)//[1, 2, 3, 4, 5, {…}, 7]
//即arr和newArrCopy本身是淺拷貝马澈,原數(shù)組pop不會(huì)影響新數(shù)組
//但原數(shù)組的項(xiàng)引用修改,會(huì)影響新數(shù)組(淺拷貝)

3.filter

通過所提供函數(shù)實(shí)現(xiàn)的測試的所有元素弄息,返回子數(shù)組

let newArr=arr.filter(callback(element[,index[,array]])[,thisArg]);//如果沒有符合條件的元素則返回空數(shù)組

4.map

舊數(shù)組每個(gè)元素執(zhí)行提供的函數(shù)得到新的元素痊班,返回新的數(shù)組

let newArr=arr.map(callback(element[,index[,array]])[,thisArg]);

總結(jié):生成新數(shù)組有這幾種方法:
1.借助已有數(shù)組 concat
2.自身數(shù)組子區(qū)域 slice
3.自身數(shù)組過濾 filter
4.自身數(shù)組加工 map

六、轉(zhuǎn)成字符串

1.join

將一個(gè)數(shù)組(或一個(gè)類數(shù)組對(duì)象)的所有元素連接成一個(gè)字符串并返回這個(gè)字符

let str=arr.join(separator);
//separator為分隔符摹量,默認(rèn)為“涤伐,”
//如果元素是對(duì)象,則會(huì)調(diào)用對(duì)象的toString()方法 

2.利用數(shù)組隱式轉(zhuǎn)換為String

轉(zhuǎn)String
顯示語法:String(s);    //轉(zhuǎn)換函數(shù)
隱式方式:"+"運(yùn)算符
1.Null        // "null" 
2.Undefined   // "undefined" 
3.Boolean     // false為"false"缨称,true為"true" 
4.Number      // "對(duì)應(yīng)數(shù)字" //0,+0,-0為0
5.String      //
6.Object      // Object為:"[object Object]"凝果; function為:"function(){}";數(shù)組為:"數(shù)組內(nèi)容1睦尽,數(shù)組內(nèi)容2" 

所以:數(shù)組轉(zhuǎn)字符串可以寫成
1.String(Arr)
2.Arr+""

七器净、偽數(shù)組

概念:有些對(duì)象是自動(dòng)生成的,鍵是數(shù)字当凡,可以類似數(shù)組的方式讀寫山害。即obj[i]
例子:arguments,DOM對(duì)象
特點(diǎn):具有l(wèi)ength屬性,不具有Array數(shù)組的方法 

轉(zhuǎn)換為數(shù)組
1.Array.prototype.slice.call();//或[].slice.call()
//

2.Array.from()
//Array.from() 方法從一個(gè)類似數(shù)組或可迭代對(duì)象中創(chuàng)建一個(gè)新的數(shù)組實(shí)例

3. 利用...

4.
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沿量,一起剝皮案震驚了整個(gè)濱河市浪慌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌朴则,老刑警劉巖权纤,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡汹想,警方通過查閱死者的電腦和手機(jī)外邓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來古掏,“玉大人坐榆,你說我怎么就攤上這事∪呷祝” “怎么了席镀?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長夏漱。 經(jīng)常有香客問我豪诲,道長,這世上最難降的妖魔是什么挂绰? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任屎篱,我火速辦了婚禮,結(jié)果婚禮上葵蒂,老公的妹妹穿的比我還像新娘交播。我一直安慰自己,他們只是感情好践付,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布秦士。 她就那樣靜靜地躺著,像睡著了一般永高。 火紅的嫁衣襯著肌膚如雪隧土。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天命爬,我揣著相機(jī)與錄音曹傀,去河邊找鬼。 笑死饲宛,一個(gè)胖子當(dāng)著我的面吹牛皆愉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播艇抠,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼幕庐,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了练链?” 一聲冷哼從身側(cè)響起翔脱,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤奴拦,失蹤者是張志新(化名)和其女友劉穎媒鼓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绿鸣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年疚沐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潮模。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡亮蛔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出擎厢,到底是詐尸還是另有隱情究流,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布动遭,位于F島的核電站芬探,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏厘惦。R本人自食惡果不足惜偷仿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宵蕉。 院中可真熱鬧酝静,春花似錦、人聲如沸羡玛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稼稿。三九已至亿遂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間渺杉,已是汗流浹背蛇数。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留是越,地道東北人耳舅。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像倚评,于是被迫代替她去往敵國和親浦徊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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