您的位置:首页 > Web前端 > JavaScript

JavaScript之数组对象常用函数

2017-03-02 17:20 525 查看

数组的空位

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

var arr=[null,,undefined];
console.log(arr[0]);//null
console.log(0 in arr);//true
console.log(arr[1]);//undefined
console.log(1 in arr);//false
console.log(arr[2]);//undefined
console.log(2 in arr);//true
console.log(arr.length);//3


Array.isArray()

typeof []  //object
typeof {} //object
typeof null //object
Array.isArray([]) //true


Array实例方法

toString()数组转为字符串

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

var arr=[1,2,3,[4,5]];
arr.toString();//1,2,3,4,5
arr.join();//1,2,3,4,5
arr.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());//3
console.log(arr);//[4,5]
console.log(arr.unshift(1,2,3));//5
console.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));//1
console.log(arr.lastIndexOf(6));//4


如果数组中包含NaN,这两个方法不适用,即无法确定数组成员是否包含NaN。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: