javascript 數(shù)組創(chuàng)建方式贮庞、數(shù)組屬性及數(shù)組方法全在這里了

數(shù)組

一.創(chuàng)建數(shù)組方式(3種)

1.創(chuàng)建字面量數(shù)組:var arr[];
2.創(chuàng)建數(shù)組對象

  • new Array();
  • new Array(size);
  • new Array(element0,element1,.....,elementn)

3.根據(jù)對象創(chuàng)建數(shù)組:var arr=new Oject([]); //不用

注意: 數(shù)組是一個引用列表亥鸠;列 表:順序僧免,只有值七兜,緊密孽糖,速度慢;
數(shù)組只有值得存儲渴语,只能遍歷數(shù)組獲取值是否存在;遍歷內(nèi)容較多苹威,當(dāng)添加刪除元素時,因為數(shù)組緊密型驾凶,速度變慢牙甫,尤其前面插入和刪除

var arr=[1,2,3,4,5];
arr[7]=10;   數(shù)組的緊密型,如果中間空余调违,就會自動補充空元素
console.log(arr);// [1, 2, 3, 4, 5, empty × 2, 10]

arr[-1]=10  插入到最后

二.數(shù)組屬性

  • length 設(shè)置或返回數(shù)組中元素的數(shù)目窟哺。
  • length也是可以設(shè)置的,如果設(shè)置為0技肩,表示清空數(shù)組且轨,如果設(shè)置為3,表示保留到第三位
    例如:arr.length=0; //表示清空數(shù)組
    arr.length=-2;//錯誤數(shù)組長度不能為負(fù)值
    arr.length="a";//如果給的不是數(shù)值,會隱式轉(zhuǎn)換為數(shù)值旋奢,如果值是NaN泳挥,就會報錯(字符串中如果有字符存在,轉(zhuǎn)換數(shù)據(jù)類型變?yōu)镹aN)

三.數(shù)組的方法

  • push()和pop()

push()方法:在數(shù)組尾部添加一個或多個新元素至朗,并且返回數(shù)組的新長度

var arr=[1,2,3]; 
arr.push(5,6,7);
console.log(arr);//[1, 2, 3, 5, 6, 7]

pop()方法:刪除數(shù)組的尾部元素屉符,并且返回這個被刪除的元素

var arr=[1,2,3];
var item=arr.pop();
console.log(item,arr);//3 >(2) [1, 2]

注意: 兩個方法都修改并替換原始數(shù)組而非生成一個修改版的新數(shù)組。

  • unshift()和shift()

unshift() 將一個或者多個新元素添加在數(shù)組的最前面锹引,返回數(shù)組的新長度

var arr=[1,2,3];
a=arr.unshift(5,[6,7],8);
console.log(arr,a);//運行結(jié)果如下
在這里插入圖片描述

shift(); 刪除數(shù)組的第一個元素矗钟,并且返回該元素

var arr=[1,2,3,4];
item=arr.shift();
console.log(arr,item);//[2, 3] 1
  • concat()和join()

concat()方法:創(chuàng)建并返回一個新數(shù)組,它的元素包括調(diào)用concat()的原數(shù)組的元素和concat()的每個參數(shù)嫌变。如果這些參數(shù)中的任何一個自身是數(shù)組吨艇,則連接的是數(shù)組的元素,而非數(shù)組本身初澎。
注意: concat()不會遞歸扁平化數(shù)組的數(shù)組秸应。concat()也不會修改調(diào)用的數(shù)組。
案列

var a=[1,2,3];
a.concat(4,5); //返回[1碑宴,2软啼,3,4延柠,5]
a.concat([4,5]); //返回[1祸挪,2,3贞间,4贿条,5]
a.concat([4,5],[6,7]); //返回[1,2增热,3整以,4,5,6,7]
a.concat(4,[5,[6,7]]); //返回[1峻仇,2公黑,3,4摄咆,5,[6,7]]

join()方法:將數(shù)組中的所有元素都轉(zhuǎn)化為字符串并連接在一起凡蚜,返回最后生成的字符串】源樱可以指定一個可選的字符串在生成的字符串中來分隔數(shù)組中的個元素朝蜘,如果不指定分隔符,默認(rèn)使用逗號涩金。

var a=[1,2,3];
a.join(); //返回"1,2,3"
a.join(" "); //返回"1 2 3"
a.join(""); //返回"123"
a.join(); //返回"1,2,3"
var b=new Array(10);
b.join('-')//'---------':9個連字號組成的字符串
  • splice()和slice()

splice()方法:第一個參數(shù)插入或刪除的起始位置谱醇,第二個參數(shù)指定了應(yīng)該從數(shù)組中刪除的元素的個數(shù)暇仲。并返回一個由刪除元素組成的數(shù)組,或者如果沒有刪除元素就返回一個空數(shù)組枣抱。
注意: 會改變原數(shù)組

var arr=[1,3,5,7,9,2,4,6,8,10];
var arr1=arr.splice(2,0,12,14);//插入元素13熔吗,14,插入在第二位
console.log(arr,arr1);//[1, 3, 12, 14, 5, 7, 9, 2, 4, 6, 8, 10] []
var arr1=arr.splice(2,2,12,14);//替換元素佳晶,刪除兩位并且插入12桅狠,14 [1, 3, 12, 14, 5, 7, 9, 2, 4, 6, 8, 10]  [12, 14]
console.log(arr,arr1)

slice(從什么位置開始,截取到什么位置之前);//返回一個新數(shù)組轿秧,原數(shù)組不改變

var a = [1,2,3,4,5];
a.slice(0,3); //返回[1,2,3]
a.slice(3); //[4,5]
a.slice(1,-1);//[2,3,4]
a.slice(-3,-2);//[3]
  • indexOf()和lastIndexOf()

indexOf()方法:arr.indexOf(要查找的元素,從第幾位開始查找被包含);查
找元素在數(shù)組中的下標(biāo),如果沒有查找到返回-1

lastIndexOf()方法: 從后向前查找中跌,
lastIndexOf(要查找的元素,從第幾位開始查找被包含);

  • forEach()

forEach()方法:從頭到尾遍歷數(shù)組,為每個元素調(diào)用指定的函數(shù)菇篡,傳遞的函數(shù)作為forEach()的第一個參數(shù)漩符。然后forEach()使用三個參數(shù)調(diào)用該函數(shù):數(shù)組元素、元素的索引和數(shù)組本身驱还。

注意: forEach()無法在所有元素都傳遞給調(diào)用的函數(shù)之前終止遍歷嗜暴。forEach不能返回任何內(nèi)容。forEach()不遍歷空元素议蟆,也不遍歷屬性闷沥。

var arr=[2,4,6,8,10,,12,14,16,18,20];
 arr.a=10;
 // forEach不遍歷空元素,也不遍歷屬性
 // forEach是匿名函數(shù)咐容,無法阻止它在循環(huán)中斷循環(huán)跳出
 arr.forEach(function(item,index,a){
     console.log(item,index,a);//打印結(jié)果如下圖
 });
在這里插入圖片描述
重構(gòu)forEach方法
function forEach(arr,fn){
     for(var i=0;i<arr.length;i++){
         if(arr[i]===undefined) continue;
         fn(arr[i],i,arr);
     }
 }
 // 橋接模式
 forEach(arr,function(item,index,a){
     console.log(item,index,a);
 }) 
  • map()

map()方法:將調(diào)用的數(shù)組的元素傳遞給指定的函數(shù)舆逃,并返回一個數(shù)組,它包含該函數(shù)的返回值戳粒。

例如:a=[1,2,3];
b=a.map(function(x){return x*x;}); //b是[1,4,9]

注意: map()返回的是新數(shù)組路狮,不修改調(diào)用的數(shù)組。如果是稀疏數(shù)組蔚约,返回的也是相同方式的稀疏數(shù)組奄妨,它具有相同的長度,相同的缺失元素苹祟。

  • some()和every()

some()方法:遍歷數(shù)組砸抛,查找是否有滿足條件(返回的結(jié)果如果是true,)就直接跳出遍歷苔咪,返回true锰悼。

var arr=[1,2,3,4,5,6];
var bool=arr.some(function(item,index,a){
    return item>4;
})
console.log(bool);//true

every()方法:判斷每一個是否都滿足條件柳骄,如果有一個返回的結(jié)果是false团赏,直接返回false。

var arr=[1,2,3,4,5,6];
var bool=arr.every(function(item){
    return item>4;
});
console.log(bool);//返回false
  • filter()

filter()方法:創(chuàng)建一個新數(shù)組耐薯,其中包含所提供函數(shù)實現(xiàn)的測試的所有元素舔清。
注意: filter()會跳過稀疏數(shù)組中缺少的元素丝里,他返回數(shù)組總是稠密的。

var arr=[1,2,3,4,5,6,7];
var arr1=arr.filter(function(item,index,a){
     return item>4;
 });
console.log(arr1);//[5, 6, 7]
  • reduce()
    reduce()方法:歸并 arr.reduce(function(上次歸并值体谒,本次遍歷的元素杯聚,索引值,數(shù)組),初始化值)抒痒;
    如果沒有設(shè)置初始化值幌绍,上次歸并值初始值為數(shù)組的第0項,本次遍歷將從下標(biāo)1開始
    如果設(shè)置了初始化值故响,上次歸并值初始值就是初始化值傀广,本次遍歷將從下標(biāo)0開始
 var arr=[1,2,3,4,5];
 var sum= arr.reduce(function(value,item,index,a){
     console.log(value,item);
     return value+item;
  },100);
  console.log(sum); //結(jié)果如下圖
在這里插入圖片描述
  • sort()

sort()方法:用于對數(shù)組的元素進(jìn)行排序,并返回數(shù)組彩届。默認(rèn)排序順序是根據(jù)字符串UniCode碼伪冰。因為排序是按照字符串UniCode碼的順序進(jìn)行排序的,所以首先應(yīng)該把數(shù)組元素都轉(zhuǎn)化成字符串(如有必要)樟蠕,以便進(jìn)行比較贮聂。

語法:arrayObject.sort(sortby);

例一:按照字母順序排序
在這里插入圖片描述
例二:還是按照字母進(jìn)行排序
在這里插入圖片描述

如果要得到自己想要的結(jié)果,不管是升序還是降序寨辩,就需要提供比較函數(shù)了吓懈。該函數(shù)比較兩個值的大小,然后返回一個用于說明這兩個值的相對順序的數(shù)字捣染。

比較函數(shù)應(yīng)該具有兩個參數(shù) a 和 b骄瓣,其返回值如下:

若 a 小于 b,即 a - b 小于零耍攘,則返回一個小于零的值榕栏,數(shù)組將按照升序排列。

若 a 等于 b蕾各,則返回 0扒磁。

若 a 大于 b, 即 a - b 大于零,則返回一個大于零的值式曲,數(shù)組將按照降序排列妨托。

例三:升序排列
在這里插入圖片描述

例四:降序排序

在這里插入圖片描述
  • reverse()

reverse倒序,不排序吝羞,原數(shù)組改變兰伤,返回原數(shù)組;

 var arr=[1,4,6,2,3,8,7,6,5,3,9];
 arr.reverse();
 console.log(arr);//9, 3, 5, 6, 7, 8, 3, 2, 6, 4, 1]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市钧排,隨后出現(xiàn)的幾起案子敦腔,更是在濱河造成了極大的恐慌,老刑警劉巖恨溜,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件符衔,死亡現(xiàn)場離奇詭異找前,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)判族,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門躺盛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人形帮,你說我怎么就攤上這事槽惫。” “怎么了辩撑?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵躯枢,是天一觀的道長。 經(jīng)常有香客問我槐臀,道長锄蹂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任水慨,我火速辦了婚禮得糜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘晰洒。我一直安慰自己朝抖,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布谍珊。 她就那樣靜靜地躺著治宣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪砌滞。 梳的紋絲不亂的頭發(fā)上侮邀,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機(jī)與錄音贝润,去河邊找鬼绊茧。 笑死,一個胖子當(dāng)著我的面吹牛打掘,可吹牛的內(nèi)容都是我干的华畏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼尊蚁,長吁一口氣:“原來是場噩夢啊……” “哼亡笑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起横朋,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤仑乌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绝骚,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年祠够,在試婚紗的時候發(fā)現(xiàn)自己被綠了压汪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡古瓤,死狀恐怖止剖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情落君,我是刑警寧澤穿香,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站绎速,受9級特大地震影響皮获,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纹冤,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一洒宝、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧萌京,春花似錦雁歌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至求妹,卻和暖如春乏盐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背制恍。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工丑勤, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吧趣。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓法竞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親强挫。 傳聞我的和親對象是個殘疾皇子岔霸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

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