JavaScript之数组对象常用函数

来源:互联网 发布:虚拟试衣软件 编辑:程序博客网 时间:2024/04/29 22:28

数组的空位

读取空位,返回undefined,可以取到length,但不能取到键名。

var arr=[null,,undefined];console.log(arr[0]);//nullconsole.log(0 in arr);//trueconsole.log(arr[1]);//undefinedconsole.log(1 in arr);//falseconsole.log(arr[2]);//undefinedconsole.log(2 in arr);//trueconsole.log(arr.length);//3

Array.isArray()

typeof []  //objecttypeof {} //objecttypeof null //objectArray.isArray([]) //true

Array实例方法

toString()数组转为字符串

join()数组转为字符串,可以添加分隔符

var arr=[1,2,3,[4,5]];arr.toString();//1,2,3,4,5arr.join();//1,2,3,4,5arr.join("|");//1|2|3|4,5

push()在数组末尾添加一个或多个元素,也可用于合并数组。会改变原来的数组。

var arr1=[1,2,3,[4,5]];var arr2=[6,7];[].push.apply(arr1,arr2);console.log(arr1);//[1,2,3,[4,5],6,7]// [].push.call(arr1,arr2);不能用,会变成[1,2,3,[4,5],[6,7]]

pop()在数组末尾删除一个元素,返回该元素,会改变原来的数组

[].pop() //undefined,空数组用pop()不会报错,返回undefined

concat()合并多个数组,返回新数组,不会改变原来的数组

var arr1=[1,2,3,[4,5]];var arr2=[6,7];console.log(arr1.concat(arr2,arr2));//[1,2,3,[4,5],6,7,6,7]console.log(arr1);//[1,2,3,[4,5]]console.log(1,2);//[1,2,3,[4,5],1,2],可以接受非数组的参数var arr3=arr1.concat();//返回arr1的浅拷贝

shift()删除数组第一个元素,返回该元素,原数组改变

unshift()在数组头添加一个元素或多个元素,返回数组长度,原数组改变

var arr=[3,4,5];console.log(arr.shift());//3console.log(arr);//[4,5]console.log(arr.unshift(1,2,3));//5console.log(arr);//[1,2,3,4,5]

reverse()颠倒数组中的元素顺序,返回新数组,原数组也会改变

var arr=[3,4,5];console.log(arr.reverse());//[5,4,3]console.log(arr);//[5,4,3]

slice()截取数组的一部分,返回新数组,原数组不会改变,第一个参数是起始位置,第二个参数是终止位置

splice()删除数组的一部分,添加新元素,原数组会改变,第一个参数是起始位置,第二个参数是删除个数,后面的参数是增添的元素

var arr=[1,2,3,4,5,6];console.log(arr.slice(2,4));//[3,4]console.log(arr);//[1,2,3,4,5,6],原数组不会改变console.log(arr.splice(1,3,'a','b'));//[2, 3, 4]console.log(arr);//[1, "a", "b", 5, 6]

如果slice方法、splice方法的位置参数是负数,则表示倒数计算的位置。
如果只是单纯地插入元素,splice方法的第二个参数可以设为0。

var arr=[1,2,3,4,5,6];console.log(arr.splice(1,0,'a'));//[]console.log(arr);//[1,'a',2,3,4,5,6]

slice方法的一个重要应用,是将类似数组的对象转为真正的数组。
Array.prototype.slice.call(arguments);

sort()排序,冒泡排序,按照字典顺序,原数组会改变,可自定义排序方式。

var arr=[6,5,4,3,2,1];console.log(arr.sort());//[1,2,3,4,5,6]console.log(arr);//[1,2,3,4,5,6]var arr=[1,2,3,4,5];console.log(arr.sort(function(a,b){return b-a;}));//[5,4,3,2,1]console.log(arr);//[5,4,3,2,1]

函数如果返回值大于0,表示第一个元素排在第二个元素后面;其他情况下,都是第一个元素排在第二个元素前面。

map()所有元素调用同一个函数,返回新数组,原数组不改变

var arr=[1,2,3,4,5];console.log(arr.map(function(a){return a+1;}));//[2,3,4,5,6]console.log(arr);//[1,2,3,4,5,]console.log(arr.map(function(elem,index,arr){return elem+index+arr.length;}));//[6,8,10,12,14]

map方法不仅可以用于数组,还可以用于字符串,用来遍历字符串的每个字符。但是,不能直接使用,而要通过函数的call方法间接使用,或者先将字符串转为数组,然后使用。

console.log([].map.call(str,function(elem,index,arr){return elem.toUpperCase();}));

map方法还可以接受第二个参数,表示回调函数执行时this所指向的对象。

console.log(arr.map(function(elem){return elem+this.length;},arr));//[6,7,8,9,10]

如果数组有空位,map方法的回调函数在这个位置不会执行,会跳过数组的空位。

forEach()跟map很像,但是一般不用来返回值

forEach方法无法中断执行,总是会将所有成员遍历完。
map方法还可以接受第二个参数,表示回调函数执行时this所指向的对象。
forEach方法会跳过数组的空位。
forEach方法也可以用于类似数组的对象和字符串。

var obj={    num:[1,2,3],    name:'abc',    print:function(){        this.num.forEach(function(){            console.log(this.name);        },this);    }}obj.print();

filter()所有元素调用同一个函数,返回true的元素组成新数组,原数组不会改变

var arr=[3,6,8,9,5,2];var res=arr.filter(function(n){return n%2==0;});console.log(res);//[6,8,2]console.log(arr);//[3,6,8,9,5,2]

filter方法还可以接受第二个参数,指定测试函数所在的上下文对象(即this对象)。

reduce()和reduceRight()依次处理每个元素,最后累计为一个值

数组元素求和

var arr=[3,6,8,9,5,2];var res=arr.reduce(function(a,b){    return a+b;});console.log(res);//33

也可以指定累计的初值:

var arr=[3,6,8,9,5,2];var res=arr.reduce(function(a,b){    return a+b;},10);console.log(res);//33

reduce是从左到右处理,reduceRight是从右到左处理。

indexOf()和lastIndexOf()返回元素第一次出现的位置和最后一次出现的位置

var arr=[3,6,8,9,6,2];console.log(arr.indexOf(6));//1console.log(arr.lastIndexOf(6));//4

如果数组中包含NaN,这两个方法不适用,即无法确定数组成员是否包含NaN。

1 0
原创粉丝点击