静态方法:
- Array.isArray(arr):返回一个布尔值,判断arr是否是数组,可以弥补typeof运算符的不足
实例方法:
- valueof(),toString():valueof()返回数组本身;toString()返回数组的字符串形式;
- push(),pop():push可以在字符串末尾添加一个或多个元素,并返回新原数组的长度;pop()删除并返回数组最后一个元素;
- shift(),unshift():shift()用于删除并返回数组的第一个元素;unshift()在数组第一个位置添加元素并返回新数组的长度;
- join():以指定参数作为分隔符,将数组成员连接为一个字符串返回,如果不提供参数,默认用逗号分隔;null或undefined或空位会被转换成空字符串;
- concat():用来合并新数组,也可添加其它类型值作为参数;arr1.concat(arr2,arr3);arr4.concat(1,2);arr5.concat(obj1,obj2);此处新数组对象相当于引用。当原对象改变,数组跟着改变;
- reverse():将数组倒叙;
- slice():提取原数组的一部分,返回一个新数组,原数组不变;arr.slice(start,end);
- splice():删除原数组的一部分成员,返回被删除的元素,且可以在删除位置添加新的数组成员,会改变原数组。arr.splice(start,删除个数,插入的新元素,新元素,);如果只有一个参数,则在参数指示位置分成两个数组,当不想删除只想插入时,将第二个参数至零;
- sort():对数组进行排序(按照字典顺序排序,所以101排在11前),改变原数组;也可自定义方法排序
[10111, 1101, 111].sort(function (a, b) {
return a - b;
})
// [111, 1101, 10111]
上面代码中,sort的参数函数本身接受两个参数,表示进行比较的两个数组成员。如果该函数的返回值大于0,表示第一个成员排在第二个成员后面;其他情况下,都是第一个元素排在第二个元素前面。
[
{ name: "张三", age: 30 },
{ name: "李四", age: 24 },
{ name: "王五", age: 28 }
].sort(function (o1, o2) {
return o1.age - o2.age;
})
// [
// { name: "李四", age: 24 },
// { name: "王五", age: 28 },
// { name: "张三", age: 30 }
// ]
注意,自定义的排序函数应该返回数值,否则不同的浏览器可能有不同的实现,不能保证结果都一致。
// bad
[1, 4, 2, 6, 0, 6, 2, 6].sort((a, b) => a > b)
// good
[1, 4, 2, 6, 0, 6, 2, 6].sort((a, b) => a - b)
上面代码中,前一种排序算法返回的是布尔值,这是不推荐使用的。后一种是数值,才是更好的写法。
- map():参数是函数方法,用来遍历数组,将所有成员依次传入相应参数函数,将每次执行结果组成一个新数组返回,原数组不变,可向方法调用函数传入三个参数,当前成员,当前位置,数组本身;
- forEach():和map类似,不返回值,原数组不变;
- filter():过滤数组,参数是函数方法,用来返回新数组,原数组不变;,可向方法调用函数传入三个参数,当前成员,当前位置,数组本身;
- some(),every():两个方法类似断言(assert),返回一个布尔值,表示判断数组成员是否满足某个条件;用函数作参数,数组成员依次执行该函数,该函数接收三参数(item,index,arr)返回一个布尔值;some方法只要一个为true则为true;every则是全部满足才返回true;
- reduce(),reduceRight():依次处理数组成员,累计为一个值,reduce从左到右,reduceRight从右到左,其他一样;
[1, 2, 3, 4, 5].reduce(function (a, b) {
console.log(a, b);
return a + b;
})
// 1 2
// 3 3
// 6 4
// 10 5
//最后结果:15
reduce方法和reduceRight方法的第一个参数都是一个函数。该函数接受以下四个参数。
- 累积变量,默认为数组的第一个成员
- 当前变量,默认为数组的第二个成员
- 当前位置(从0开始)
- 原数组
这四个参数之中,只有前两个是必须的,后两个则是可选的。
如果要对累积变量指定初值,可以把它放在reduce方法和reduceRight方法的第二个参数。
- indexOf(),lastIndexOf():indexOf()返回元素在数组第一次出现的位置,如果没有出现则返回-1,可加第二个参数表示开始搜素的位置;lastIndexOf()返回元素数组最后一次出来的位置,没有则返回-1;
- 链式使用
var users = [
{name: 'tom', email: 'tom@example.com'},
{name: 'peter', email: 'peter@example.com'}
];
users
.map(function (user) {
return user.email;
})
.filter(function (email) {
return /^t/.test(email);
})
.forEach(function (email) {
console.log(email);
});
// "tom@example.com"
上面代码中,先产生一个所有 Email 地址组成的数组,然后再过滤出以t开头的 Email 地址,最后将它打印出来。