第2最常用類型。
特點:
- 數(shù)據(jù)的有序列表
- 數(shù)據(jù)的每一項可以保存任何類型的數(shù)據(jù)
- 數(shù)組的大小可以動態(tài)調(diào)整蹲坷、自動增長
創(chuàng)建方法:
- 構造函數(shù)
var colors = new Array();
new 可省略
var colors = new Array(20);
var colors = Array(20);
var colors = new Array("red", "blue", "green");
var colors = Array("red", "blue", "green");
- 數(shù)組字面量表示法
var colors = ["red", "blue", "green"]; //創(chuàng)建包含3個字符串的數(shù)組
var names = []; //創(chuàng)建空數(shù)組
在使用數(shù)組字面量表示法時邑飒,不會調(diào)用Array構造函數(shù)疙咸。(Firefox3.0及更早版本除外)
注意:
- 數(shù)組索引從0開始,最后一項的索引是length-1
- 數(shù)組的length屬性——不是只讀的乞旦。so题山,可以通過設置length的值進行數(shù)組的除項&增項
檢測數(shù)組
- instanceof 操作符
if (value instanceof Array) {
//對數(shù)組的操作
}
問題:假定了單一的全局執(zhí)行環(huán)境顶瞳。
- Array.isArray() 方法
不管數(shù)組是在哪個全局執(zhí)行環(huán)境中創(chuàng)建的,確定某個值是否是數(shù)組焰络。
if (Array.isArray(value) {
//對數(shù)組的操作
}
轉(zhuǎn)換方法
轉(zhuǎn)換方法 | 說明 |
---|---|
toString() | 返回由數(shù)組中每個值的字符串形式拼接而成的一個逗號分隔的字符串符喝。 |
valueOf() | (返回值同上) 實際上會調(diào)用數(shù)組每一項的toString() 方法 |
toLocaleString() | 經(jīng)常也會返回與toString() 和 valueOf()的方法的值协饲。但是课蔬,若數(shù)組每一項有toLocaleString() 的方法二跋,將會返回toLocaleString() 的值流昏。 |
var colors = ["red", "blue", "green"];
alert(colors.toString()); //輸出: red,blue,green
alert(colors.valueOf()); //輸出:red,blue,green
alert(colors); //輸出:red,blue,green
toLocaleString()返回的值與toString() 和 valueOf()的方法的值不同的例子:
var person1 = {
toLocaleString:function() {
return "張";
},
toString:function() {
return "三";
}
};
var person2 = {
toLocaleString:function() {
return "李";
},
toString:function() {
return "四";
}
};
var people = [person1, person2];
alert(people); //輸出:三,四
alert(people.toString()); //輸出:三,四
alert(people.toLocaleString()); //輸出:張,李
用join() 方法可以替換輸出的連接符:
alert(colors.join("||") //輸出: red||blue||green
棧方法
數(shù)組表現(xiàn)的跟棧(LIFO况凉,后進先出)一樣。
ECMAScript為數(shù)組專門提供了push() 和pop() 方法闷营,以便實現(xiàn)類似棧的行為傻盟。
var colors() = ["red", "blue"];
colors.push("brown");
colors[3] = "black";
alert(colors.length); //4
var item = colors.pop();
alert(item); // black
隊列方法
數(shù)組表現(xiàn)的跟隊列(FOFO嫂丙,先進先出)一樣。
push() 和 shift() 實現(xiàn)類似隊列的行為诽表。
var colors = new Array();
var count = colors.push("red", "green");
alert(count); //2 數(shù)組:red, green
count = colors.push("black");
alert(count); //3 數(shù)組:red, green,black
var item = colors.shift();
alert(item); //"red"
alert(colors.length); //2 數(shù)組:green,black
總結(jié):實現(xiàn)組數(shù)像棧和隊列一樣的方法
方法名 | 說明 |
---|---|
push() | 在數(shù)組的末尾添加任意個項,并返回修改后數(shù)組的長度 |
pop() | 在數(shù)組的末尾移除 最后一個項隅肥,并返回修改后數(shù)組的長度 |
unshift() | 在數(shù)組的前端添加任意個項腥放,并返回修改后數(shù)組的長度 |
pop() | 在數(shù)組的前端移除 第一個項,并返回修改后數(shù)組的長度 |
重排列方法
方法名 | 說明 |
---|---|
reverse() | 直接反轉(zhuǎn)數(shù)組項的順序平痰,并返回數(shù)組 |
sort() | 按升序排列數(shù)組項:小→大伍纫; 調(diào)用每個數(shù)組項的toString()轉(zhuǎn)型方法莹规,比較得到的字符串泌神,以確定排序; 返回排序后的數(shù)組母市。 |
var values = [5,6,7,1,2,3];
values.reverse();
alert(values); //3,2,1,7,6,5
var values2 = [5,6,7,1,2,3];
values2.sort();
alert(values2); //1,2,3,5,6,7
values2.reverse();
alert(values2); //7,6,5,3,2,1
// but;季谩!7蹬痢8萃臁O晨ā!K阈小V菪稀!F濉Q绞唷!@虐琛U獭<纤 !N床!!
var values3 = [0,1,5,10,15];
values3.sort();
alert(values3); //0,1,10,15,5 10位于5前旁趟,不正確
// so ↓
function compare(value1,value2) {
if (value1<value2) {
return -1;
} else if(value1>value2){
return 1;
} else {
return 0;
}
}
//或者
//function compare(value1,value2) {
// return value2-value1轻庆;
//} 數(shù)值類型的數(shù)組敛劝,升序
var values4 = [0,1,5,10,15];
values4.sort(compare);
alert(values4); //0,1,5,10,15
操作方法
方法名 | 說明 |
---|---|
concat() | 將傳遞進來的各個數(shù)組 或值添加到結(jié)果數(shù)組中夸盟,組成一個數(shù)組 |
slice() | 可接受1或2個參數(shù),表示要返回數(shù)組的起始和結(jié)束位置桩砰。slice()不會影響原數(shù)組 |
splice() | 主要用途:向數(shù)組的中部插入項:刪释簿、插庶溶、替換 |
var colors = ["red","green","blue"];
var colors2 = colors.concat("yellow",["black","brown"]);
alert(colors); //red,green,blue
alert(colors2); //red,green,blue,yellow,black,brown
var colors = ["red",",green","blue","yellow","purple"];
var colors2 = colors.slice(1);
var colors3 = colors.slice(1,4);
alert(colors2); //green,blue,yellow,purple
alert(colors3); //green,blue,yellow
var colors = ["red",",green","blue"];
//參數(shù) → (要刪除的第一項的位置偏螺,要刪除的數(shù)目)
var removed = colors.splice(0,1); //刪除第1項
alert(colors); //green,blue
alert(removed); //red,返回的數(shù)組只包含1項
//參數(shù) → (起始位置酿联,0即要刪除的項數(shù)夺巩,要插入的項)
var removed = colors.splice(1,0,"yellow","orange"); //刪除第1項
alert(colors); //green,yellow,orange,blue
alert(removed); //返回的1個空數(shù)組
//參數(shù) → (起始位置柳譬,要刪除的項數(shù),要插入的任意數(shù)量的項) 插入的項數(shù)不必=刪除的項數(shù)
var removed = colors.splice(1,1,"red","purple"); //刪除第1項
alert(colors); //green,red,purple,orange,blue
alert(removed); //yellow蹲姐,返回的數(shù)組只包含1項
位置方法
方法名 | 說明 |
---|---|
indexOf() | 從頭到后嚴格查找(===)柴墩,沒找到返回-1 |
lastIndexOf() | 從尾到頭嚴格查找(===)凫岖,沒找到返回-1 |
indexOf()哥放、lastIndexOf() 可有且最多有兩個參數(shù):
eg:
indexOf(searchvalue,fromindex)
searchvalue:需檢索的字符串值。必要踩身。
fromindex:在字符串中開始檢索的位置社露,默認為0「礁耄可選坷备。
var number = [1,2,3,4,5,4,3,2,1];
alert(number,index(4)); //3
alert(number,lastIndex(4)); //5
var person = {name:"lc"};
var people = [ {name:"lc"} ];
var morePeople = [person];
alert(people.indexOf(person)); //-1
alert(morePeople.indexOf(person)); //0
迭代方法
不會修改數(shù)組中包含的值.
方法名 | 說明 |
---|---|
every() | 對數(shù)組中的每一項運行給定函數(shù)情臭,若該函數(shù)對每一項都返回True俯在,則返回True; |
filter() | 對數(shù)組中的每一項運行給定函數(shù)鸿摇,若該函數(shù)會返回True劈猿,則返回True揪荣; |
forEach() | 對數(shù)組中的每一項運行給定函數(shù)。不返回值佛舱。 |
map() | 對數(shù)組中的每一項運行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組订歪。 |
some() | 對數(shù)組中的每一項運行給定函數(shù)刷晋,若該函數(shù)對任一項都返回True慎陵,則返回True; |
var numbers = [1,2,3,4,5,4,3,2,1];
var everyResult = numbers.every(function(item, index, array) {
return (item>2);
})
alert(everyResult); //False
var someResult = numbers.every(function(item, index, array) {
return (item>2);
})
alert(someResult); //True
var filterResult = numbers.every(function(item, index, array) {
return (item>2);
})
alert(filterResult); //[3,4,5,4,3]
var mapResult = numbers.every(function(item, index, array) {
return (item*2);
})
alert(mapResult); //[2,4,6,8,10,8,6,4,2]
numbers.forEach(function(item, index, array) {
//執(zhí)行某些操作
})
縮小方法
方法名 | 說明 |
---|---|
reduce() | 迭代數(shù)組的所有項構建一個最終返回的值。方向:頭→尾 |
reduceRight() | 迭代數(shù)組的所有項構建一個最終返回的值邮破。方向:尾→頭 |
var values = [1,2,3,4,5];
var result = values.reduce(function(prev, cur, index, array) {
return prev - cur;
});
alert(result); // 1-2-3-4-5 = -13
var result2 = values.reduceRight(function(prev, cur, index, array) {
return prev - cur;
});
alert(result2); //5-4-3-2-1 = -5