创建数组(两种方式)
1.使用Array构造函数 var arr = new Array();
var arr = new Array(1);//表示该数组长度为1
var arr = new Array('1');//表示该数组中有一个字符串元素1,且长度也为1
var arr = new Array(1,2,3,4);//数组元素包括值1,2,3,4,长度为4
var arr = new Array('red','green','yellow');//数组中有三个字符串类型的元素
2.使用字面量方法,多个项由逗号隔开
var arr = [];//空数组
var arr = [1,2,3,4];
var arr = [1,2,3,];//会创建一个元素为1,2,3或为1,2,3,undefined的数组(ie8及以下浏览器中)
判断是否为数组(两种方式)
1.使用instanceof,返回值为布尔类型
var arr = new Array();
console.log(arr instanceof Array);//true
2.使用isArray()方法,返回值为布尔类型
console.log(Array.isArray(arr));//true
数组的方法
一、所有对象都具有的转换方法(1.valueOf(),2.toString(),3.toLocaleString())
console.log(arr.valueOf());//返回原数组对象
console.log(typeof arr.toString());//返回由数组中的每个元素用逗号拼接成的字符串
console.log(typeof arr.toLocaleString());//同样是返回字符串,与toString()不同的是,该数组中的每一项元素都要调用toLocaleString()方法
二、栈方法(先进后出 4.pop() 5.push())
var arr = [2,6,3,4,6];
alert(arr.pop());// 删除数组最后一个元素,返回最后一个元素6
alert(arr.push('c',2,3));//从数组末尾添加一个或多个元素,返回新数组数组的长度8
三、 6.shift() 7.unshift())
var arr = [2,6,3,4,6];
alert(arr.shift());// 删除数组第一个元素,返回该元素2
alert(arr.unshift('c',2,3));//从数组头部添加一个或多个元素,返回新数组的长度
四、位置方法(8.indexOf() 9.lastIndexOf())
当找不到时,返回-1
接受一个参数时:
indexOf(value);返回从索引位置0开始计数查找,返回value值第一次出现的索引位置
var arr = new Array(50,20,20,1,2,3);
var a = arr.indexOf(20);//1
lastIndexOf(value);//返回从数组末尾开始计数查找,返回value值第一次出现的索引位置
var arr = new Array(50,20,20,1,2,3);
var a = arr.lastIndexOf(20);
console.log(a);//2
接受两个参数时:value代表要查找的数值,index代表要查找的起始位置(从哪开始查找)
indexOf(value,index);
var arr = new Array(50,20,20,1,2,3);
var a = arr.indexOf(1,3);
console.log(a);//3
var arr = new Array(50,20,20,1,2,3);
var a = arr.indexOf(1,4);
console.log(a);//-1
lastIndexOf(value,index)
var arr = new Array(50,20,20,1,2,3);
var a = arr.lastIndexOf(1,4);
console.log(a);//3
var arr = new Array(50,20,20,1,2,3);
var a = arr.lastIndexOf(1,2);
console.log(a);//-1
五、重排序方法(10.reverse() 11.sort())
reverse()反转数组项的顺序
var arr = new Array('a','b','c');
var a = arr.reverse();
console.log(a);//返回新数组 ['c','b','a']
var arr = new Array(1,2,3);
var a = arr.reverse();
console.log(a);//返回新数组 [3,2,1]
sort()方法可以接收一个比较函数作为参数
原理:对数组中的每一项调用toString()方法,转化成字符串,再进行大小比较,最终返回新的数组
var arr = new Array('da','aba','c');
console.log(arr.sort());//["aba", "c", "da"]
var arr = new Array(1,2,3,12,35);
console.log(arr.sort());// [1, 12, 2, 3, 35]
利用sort()方法进行数值排序(通过自定义比较函数,并将该函数作为参数传给sort()方法即可)
//从小到大排序
var arr = new Array(1,2,3,12,35);
function compare(value1,value2){
if(value1<value2){
return -1;
}else if(value1 < value2){
return 1;
}else{
return 0;
}
}
//数值型可以采用如下方法
/*
function compare(value1,value2){
return value1 - value2;
}
*/
console.log(arr.sort(compare));// [1, 2, 3, 12, 35]
六、操作方法(12.join() 13.slice() 14.concat() 15.splice(index,num,item1,item2,item3...))
join('-')只接收一个参数,即作为连接数组的分隔符,返回拼接好后的字符串
var arr = new Array(1,2,3,12,35);
console.log(arr.join('-'));//1-2-3-12-35
console.log(typeof arr.join('-'));//string
slice()接收一个或两个参数,如果不写参数,则返回空数组
当接收一个参数时,返回从该索引位置开始到结束位置的所有数组项,不改变原数组
var arr = new Array(1,2,3,12,35);
console.log(arr.slice(3));//[12, 35]
console.log(arr.length);//5
当接收两个参数时,返回从index1开始到index2结束的所有数组项,不包括index2项
var arr = new Array(1,2,3,12,35);
console.log(arr.slice(2,4));//[3, 12]
concat()
可以传递一到多个数组,会将数组中的每一项都添加到原数组中,返回新的数组,原数组保持不变
var arr = new Array(1,2,3,12,35);
var a = ['a','b','c'];
var b = [66,88,11];
var c = arr.concat(a,b);
console.log(c);//[1, 2, 3, 12, 35, "a", "b", "c", 66, 88, 11]
console.log(arr);//[1, 2, 3, 12, 35]
如果传递的不是数组,则同样被添加到原数组末尾,返回新的数组,原来数组保持不变
var arr = new Array(1,2,3,12,35);
console.log(arr.concat('a',1));//[1, 2, 3, 12, 35, "a", 1]
如果不写参数,则返回原来的数组
var arr = new Array(1,2,3,12,35);
console.log(arr.concat());//[1,2,3,12,35]
splice(index,num,item1.item2,item3)可以在数组的任意位置插入、删除、替换一个或多个元素,返回新的数组,原数组改变
插入元素:(从索引位置为index之前,删除num=0个元素,插入item1,item2..个元素)
var arr = new Array(1,2,3,12,35);
arr.splice(1,0,'a','b');
console.log(arr);//[1, "a", "b", 2, 3, 12, 35]
删除元素:(从索引位置为index开始,包括等于索引index的元素,直接删除num个元素)
var arr = new Array(1,2,3,12,35);
arr.splice(1,2);
console.log(arr);//[1, 12, 35]
替换元素:(从索引位置为index开始,包括索引位置等于index的元素,删除num个元素,再插入对应的元素)
var arr = new Array(1,2,3,12,35);
arr.splice(1,2,'99','88','77');
console.log(arr);//[1, "99", "88", "77", 12, 35]
七、迭代方法(16.filter() 17.every() 18.some() 19.forEach() 20.map())
数组调用这些方法,每个方法都接收两个参数:要在数组中的每一项运行的函数,和运行该函数的作用域对象
传入每一项运行的函数都接收三个参数:数组中的每一项元素,该项在数组中的位置,数组对象本身
filter()返回满足函数条件的新数组,原数组保持不变
var arr = new Array(1,2,3,12,35);
var a = arr.filter(function fn(item,index,array) {
return (item>2);
});
console.log(a);//[3, 12, 35]
console.log(arr);//[1, 2, 3, 12, 35]
every()只有所有项全部满足函数条件,才会返回true,否则返回false,原数组不变
var arr = new Array(1,2,3,12,35);
var a = arr.every(function fn(item,index,array) {
return (item>2);
});
console.log(a);//false
console.log(arr);//[1, 2, 3, 12, 35]
some()只要存在某一项满足函数条件,就会返回true,原数组不变
var arr = new Array(1,2,3,12,35);
var a = arr.some(function fn(item,index,array) {
return (item>2);
});
console.log(a);//true
console.log(arr);//[1, 2, 3, 12, 35]
forEach()遍历数组中的每一项元素,对数组中的每一项执行传入的函数,没有返回值
var arr = new Array(1,2,3,12,35);
var a = arr.forEach(function fn(item,index,array) {
//自定义执行某些操作
});
map() 返回新数组,该新数组中的每一项都是对应于原数组中的每一项,并且值为原数组中的每一项运行执行函数的返回结果,原数组不变
var arr = new Array(1,2,3,12,35);
var a = arr.map(function fn(item,index,array) {
return (item*3);
});
console.log(a);// [3, 6, 9, 36, 105]
console.log(arr);//[1, 2, 3, 12, 35]
网友评论