ECMAScript中的数组
一、创建数组
用来存储一组数据
方法一:使用Array(数组)构造函数
语法:new Array( ) //首字母大写。
小括号( )说明:
1.预先知道数组要保存的项目数量
2.向Array构造函数中传递数组应包含的项
var colors = new Array(3);//预先知道数组中是三个数值
console.log(colors);//输出[]
输出:表示最终将存三个值
var nums = new Array(1,2,3,9);//将数组值直接写在()里
console.log(nums);
输出:
方法二:使用数组字面量表示法
由一对包含数组项的方括号[ ]表示,多个数组项之间以逗号隔开。
例1:
var cols = ["red","yellow","green"];
console.log(cols);
例2:[ ]内是不同类型
var infos = [6,'marry',true,{email:"marry@sohu.com"}];
console.log(infos);
二、数组元素的读写
使用方括号[ ]并提供相应的索引
说明:索引是从0开始的正整数
例:通过索引 ,9打印数组中的某个值
var cols = ["red","yellow","green"];
console.log(cols[1]);//读取数组中索引为1的值yellow
console.log(cols[3]);//取不到打印undefined
例:赋予数组值
var colors = new Array(3);//表示数组中是三个数值
colors[0] = "#f00";
colors[1] = "#0f0";
colors[2] = "#00f";
console.log(colors);
打印结果:
三、数组长度
语法:array.length
功能:获取数组array的长度
返回值:number
说明:
1.通过设置length可以从数组的末尾移除项或向数组中添加新项。
2.把一个值放在超出当前数组大小的位置上时,会重新计算数组长度值,长度值等于最后一项索引加1。
例1:
var arr = ["a","b","c","d"];
console.log(arr.length);//4,打印4
例2:从数组末尾移除项
var arr = ["a","b","c","d"];
arr.length = 3;
console.log(arr);//打印结果[a,b,c],移除了d
例3:看索引,重新计算数组长度
var arr = ["a","b","c"];
arr[99] = 'z';
console.log(arr.length);//100
四、数组的遍历
var arr = ["a","b","c"];
for (var i = 0;i<arr.length;i++) {
console.log(arr[i]);
}
结果:
五、数组栈 push()
语法:arrayObject.push(newele1,newele2,…,neweX)
功能:把它的参数顺序添加到arrayObject(数组)的尾部。
返回值;把指定的值添加到数组后的新长度,number。
例:
var colors = new Array("red","green");
var len = colors.push("blue");
console.log(len);//打印结果为 3
六、数组栈unshift()
语法:arrayObject.unshift(newele1,newele2,…,neweX)
功能:把它的参数添加到arrayObject的开头。
返回值:把指定的值添加到数组后的新长度。
var nums = [2,7,8,6];
var size = nums.unshift(99,66);
console.log(size);//打印值6
console.log(nums);//[99,66,2,7,8,6]
七、数组栈pop()
语法:arrayObject.pop()
功能:删除 arrayObject的最后一个元素
返回值:被删除的那个元素
var nums = [2,7,8,6];
var n = nums.pop();
console.log(n);//6,最后一个元素
console.log(nums);//[2,7,8]
八、数组栈shift()
语法:arrayObject.shift()
功能:删除arrayObject中的第一个元素
返回值:被删除的那个元素
var nums = [2,7,8,6];
var n = nums.shift();
console.log(n);//2,被删除的第一个元素
console.log(nums);//[7,8,6]
九、join()
语法:arrayObject.join(separator)
功能:用于把数组中的所有元素放入一个字符串。
返回值:字符串。string
例1:jion(),括号内说明都不添加 默认用,连接
var nums = [2,4,5];
var str = nums.join();
console.log(str);//2,4,5
console.log(typeof(str));//string
例2:当("-"),字符串之间用-连接
var words = ["a","b","c"];
var wordstr = words.join("-");
console.log(wordstr);//a-b-c
十、reverse()
语法:arrayObject.reverse()
功能:用于颠倒数组中元素的顺序
返回值:数组
例:
var nums = [2,4,5];
nums.reverse();
console.log(nums);//[5,4,2]
十一、sort()
语法:arrayObject.sort(sortby)
功能:用于对数组的元素进行排序
返回值:数组
说明:
1.即使数组中的每一项都是数值,sort()方法比较的也是字符串
2.sort()方法可以接收一个比较函数作为参数
sort()排序时每次比较两个数组的项都会执行这个参数,并把两个比较的数组项作为参数传递给函数,当返回值为1的时候就交换两个数组项的顺序,否则就不交换;如果不使用参数,那么会按照字符编码(可查询字符编码表)的顺序进行比较,将数组里面的项转化为字符串进行比较。
例1:转化为string进行比较排序,例如9和12比较,9>1,9排在后面
var nums = [9,12,19,88,75];
nums.sort();
console.log(nums);//[12, 19, 75, 88, 9]
例2:降序
var nums = [9,12,19,88,75];
nums.sort(function(a,b){return b-a});
console.log(nums);//降序 [88, 75, 19, 12, 9]
升序
var nums = [9,12,19,88,75];
nums.sort(function(a,b){return a-b});
console.log(nums);//升序[9, 12, 19, 75, 88]
十二、concat()方法
语法:arrayObject.concat(arrayX,arrayX,…,arrayX)
功能:用于连接两个或多个数组
var arr1 = ['a','b','c'],
arr2 = ['d','e','c'],
arr3;
arr3 = arr1.concat(arr2,["m",99,8]);
console.log(arr3);//["a", "b", "c", "d", "e", "c"]
十三、slice()方法
语法:arrayObject.slice(start,end)。
功能:从已有的数组中返回选定的元素。
参数:start(必需)规定从何处开始选取,如是负数,从数组尾部开始算起;
end(可选)规定从何处结束选取,是数组片段结束处的数组下标。
说明:
1.start和end指数组中的索引值
2.截取从start到end(不包含该元素)的元素,即从start到end-1的元素。
3.如没有指定end,切分的数组包含从start到数组结束的所有元素。
4.如slice()方法的参数中有一个负数,则用数组长度加上该数来确定相应的位置。
返回值:数组。
例1:只有start
数组 | 索引 |
---|---|
red | 0 |
green | 1 |
blue | 2 |
yellow | 3 |
orange | 4 |
var colors = ["red","green","blue","yellow","orange"];
var newColors = colors.slice(1);
console.log(newColors);//["green", "blue", "yellow", "orange"]截取了索引从1到结束的数组
例2:start和end都有
var colors = ["red","green","blue","yellow","orange"];
var newColors = colors.slice(1,3);
console.log(newColors);//["green", "blue"]截取索引1到3的数组,不包括3
例3:start为负
var colors = ["red","green","blue","yellow","orange"];
var newColors = colors.slice(-2,4);
console.log(newColors);//["yellow"]截取从5-2=3索引值到第4的索引值
例4:面试题
完成以下代码段,实现b数组对a数组的拷贝,方法越多越好
var a = [1,"yes",3],
b;
1.数组遍历,push
b = new Array();
for(var i = 0;i < a.length;i++){
b.push(a[i]);
}
console.log(b);
2.concat()
b = [].concat(a);
console.log(b);
3.slice()
b = a.slice(0);
console.log(b);
十四、splice()删除、插入、替换
1.splice()删除
语法:arrayObject.splice(index,count)
功能:删除从index(索引)处开始的零个或多个元素
返回值:含有被删除的元素的数组
说明:
1.index是开始删除的索引
2.count是要删除的项目数量,如果设置为0,则不会删除项目。
3.如果不设置,则删除从index开始的所有值。
例1:只有index
var arr = ["a","b","c","d","e","f"];
var delArr = arr.splice(2);//删cdef,索引为2的后面全删除
console.log(arr);//["a", "b", ]
console.log(delArr);//["c", "d","e","f"]
结果:
例2:index,count都有
var arr = ["a","b","c","d","e","f"];
var delArr = arr.splice(2,2);//删cd,删除从索引为2开始的两个元素
console.log(arr);//["a", "b", "e", "f"]
console.log(delArr);//["c", "d"]
结果:
2.splice()插入
语法:arrayObject.splice(index,0,item1,…,itemX)
参数 | 解释 |
---|---|
index | 起始位置 |
0 | 要删除的项数 |
item1…itemX | 要插入的项 |
功能:在指定位置插入值
例1:
var arr = ["a","b","c","d","e","f"];
var delArr = arr.splice(3,0,"m","n");//在c的后面添加m ,n
console.log(arr);//["a", "b", "c", "m", "n", "d", "e", "f"]
console.log(delArr);//[],返回是空数组
结果:
3.splice()替换
语法:arrayObject.splice(index,count,item1,…,itemX)
功能:在指定位置插入值,且同时删除任意数量的项
参数 | 解释 |
---|---|
index | 起始位置 |
count | 要删除的项数 |
item1…itemX | 要插入的项 |
返回值:从原始数组中删除的项(如果没有删除任何项,则返回空数组)
例:
var arr = ["a","b","c","d"];
var replceArr = arr.splice(2,2,"m","n");//删除索引从2开始的两个数,c,d;并在索引为2的位置连续开始插入m,n
console.log(arr);//["a","b","m","n"];
console.log(replceArr);//["c","d"]
结果:
十五、indexOf()&lastIndexOf()
语法:arrayObject.indexOf(searchvalue,startIndex)
功能:从数组的开头(位置0)开始向后查找
参数 | 解释 |
---|---|
searchvalue | 必需,要查找的项 |
startIndex | 可选,起点位置的索引 |
返回值:number,查找的项在数组中的索引值,没有找到的情况下返回-1.
例1:一般查找
var nums = [1,7,6,5,7,9,8];
var pos = nums.indexOf(7);//只算第一个7的索引号
console.log(pos);//1
例2:查找数组中没有的值
var nums = [1,7,6,5,7,9,8];
var pos = nums.indexOf(99);//查找数组中的99
console.log(pos);//-1,因为没有返回-1
例3:index和count都存在
var nums = [1,7,6,5,7,9,8];
var pos = nums.indexOf(7,4);//从索引为4的位置向后查找为7的值的位置
console.log(pos);//4,第二个7的位置
结果:
例4:lastIndexOf()
var nums = [1,7,6,5,7,1,9,8];
var pos = nums.lastIndexOf(1);//从末尾处开始查找
console.log(pos);//5,后面一个1的索引值
说明:支持浏览器ie9以上;
若要低版本的浏览器也可以实现IndexOf()功能,可以封装一个方法
例如
var nums = [1,7,6,5,7,1,9,8];
function arrayIndexOf(arr,value){
for (var i = 0;i < arr.length;i++) {
if (arr[i] === value) {
return i;
}
}
return -1;
}
var pop2 = arrayIndexOf(nums,7);
console.log(pop2);//1