数组:
1、创建方式:
(1)字面量创建:
var arr=[1,2,3]
(2)构造函数创建:
var arr=new Array(2) #参数为2,表示生成一个两个成员的数组
单个非数值作为参数时,表示返回的是新数组成员:
new Array(“222”)
// [‘222’]
多参数时,所有参数都是新数组成员
new Array(1,2)
// [1,2]
2、基本操作:
(1) push() :
在数组末尾添加一个或多个元素,返回添加后的数组长度,原数组发生改变。
var arr=[1,2]
var a=arr.push("22",4)
console.log(arr) //[1,2,"22",4]
(2)pop() :
删除数组的最后一个元素,返回这个删除的元素,原数组发生改变(空数组返回undefined)。
var arr=[1,2,3,4]
arr.pop();
console.log(arr) //[1,2,3]
(3)unshift() :
在数组的第一个位置添加一个元素,返回添加后的数组长度,原数组发生改变。
(4)shift() :
删除数组中的第一个元素,返回这个删除的元素,原数组发生改变。
(5)slice(start,end) :
提取目标数组中的一部分成员,返回一个新数组,原数组不变:
第一个参数表起始位置索引(从0开始),第二个参数为终止位置(不包括该位置元素)
第二个参数为空,则一直返回到原数组的最后一个元素,不写参数表示拷贝一个原数组
(6)splice(start,length) :
删除目标数组中的一部分成员 ,返回被删除元素,改变原数组。
一个参数 : 从该参数对应位置开始截取,直至数组结束
两个参数 : 第一个参数表示截取起始位置,第二参数表示截取的长度
三个或三个以上的参数 : 从截取起始位置开始增加第三个及以后的参数 原数组发生改变
(7)reverse() :
数组翻转,返回改变后的数组,改变原数组。
(8)sort() :
对数组成员排序,默认是按照字典顺序排序(先转换成字符串),改变原数组。
常用案例:
var arr=[1,4,2,6,3,7]
arr.sort(function(a,b){
return a-b; //升序
})
console.log(arr) //[1,2,3,4,6,7]
(9) join() :
将数组转换成字符串,默认以 , 分割,也可指定数组内的参数作为分割符。
var arr=new Array(3);
arr[0]="lala";
arr[1]=4;
arr[2]=3;
console.log(arr.join()); // lala,4,3
3、ES5新增数组方法:
(1)Array.isArray(obj) :
判断 一个对象是否为数组,对象是数组返回 true,否则返回 false
(2)map() :
将数组的所有成员遍历传参给函数,把每一次的执行结果组成一个新数组返回,原数组不变。
let arr=[1,2,3,4,5]
let res=arr.map(function(n){
return n+1
})
console.log(res) //[2,3,4,5,6]
扩展:
[“1”, “2”, “3”].map(parseInt); //结果 [1, NaN, NaN]
想要输出结果是[1,2,3]:
注:
parsnInt()函数语法:parseInt(string, radix) radix默认为10
回调函数语法:function callbackfn(value, index, array1)
value 数组元素的值。
index 数组元素的数字索引。
array1 包含该元素的数组对象。function return(element){
return parseInt(element,10);
}
console.log([“1”,“2”,“3”].map(return)) //[1,2,3]
3、foreach():
通过遍历数组元素来操作数据,不会返回遍历的所有数据,无法中断执行,会将所有成员遍历完。
如果数组遍历的目的是为了得到返回值,那么使用map方法,否则使用forEach方法。
与foreach区别:
共同点:
1.都是循环遍历数组中的每一项。
2.forEach() 和 map() 里面每一次执行的匿名函数都支持3个参数:
数组中的当前项item,当前项的索引index,原始数组input。
3.匿名函数中的this都是指Window。
4.只能遍历数组。
不同点:
1.forEach(), 没有返回值,只用来操作数据
var ary = [12,23,24,42,1];
var res = ary.forEach(function (item,index,input) {
input[index] = item*10;
})
console.log(res); //undefined;
console.log(ary); // [120, 230, 240, 420, 10] #原数组发生改变;
2.map(),有返回值,可以return 出来。
var ary = [12,23,24,42,1];
var res = ary.map(function (item,index,input) {
return item*10;
})
console.log(res); //[120,230,240,420,10];
console.log(ary); //[12,23,24,42,1]; #不改变原数组
4、every():
(返回值为布尔)接受一个函数作为参数,所有数组成员依次执行该函数
使用指定函数检测数组中的所有元素,检测数组所有元素是否都符合指定条件(通过函数提供)全部满足返回true,否则返回false;
let arr=[1,2,3,4,5]
let res=arr.every(function(v){
return v>0;
})
console.log(res) //true
5、some():
(返回值为布尔) 接受一个函数作为参数,所有数组成员依次执行该函数
依次执行数组的每个元素,检测数组中的元素是否满足指定条件(函数提供),只要有一个满足返回true,否则false
6、filter():
(过滤),将数组的所有成员依次传入参数函数遍历,返回符合条件的数组成员
创建一个新的数组,新数组中的元素是通过函数遍历,返回数组中符合条件的所有元素
let arr=[1,3,54,5,6]
let res=arr.filter(v=>{
return v>10;
})
console.log(res) //54
7、indexOf():
返回给定元素在数组中第一次出现的位置索引,如果没有出现则返回-
let arr=[1,"b",8,7]
let a=arr.indexOf("b")
let b=arr.indexOf(2)
console.log(a,b) // 1 -1
可以接受第二个参数,表示搜索的开始位置,返回原数组中的索引位置
let arr=[6,"b","c","f",5]
let c=arr.indexOf("c",2)
let d=arr.indexOf(6,1)
console.log(c,d) // 2 -1