“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 6 天,点击查看活动详情” 是js的原生对象,同时也是一个构造函数,可以用来生成新的数组。
静态方法
Array.isArray()
返回一个布尔值,表示参数是否为是数组 实例方法
valueOf(),toString()
valueOf方法是一个所有对象都拥有的方法,表示对该对象求值。不同对象的valueOf方法不尽一致,数组的valueOf方法返回数组本身。
toString方法也是对象的通用方法,数组的toString方法返回数组的字符串形式。
push(),pop()
push()在数组末尾添加元素,返回新数组的长度,会改变原数组
pop(),删除最后一个元素,并返回该元素,会改变原数组
shift(),unshift()
shift()删除第一个元素,返回该元素,改变原数组
unshift()在第一的位置添加元素,返回新数组的长度,改变原数组
join()
以指定参数作为分隔符,将数组成员作为一个字符串返回,如果不提供参数,默认用逗号分隔
concat()
合并多个数组,将新数组成员添加到原数组的后部产生一个新数组,原数组不变
[1, 2, 3].concat(4, 5, 6)
// [1, 2, 3, 4, 5, 6]
如果数组成员包括对象,concat返回当前数组的一个浅拷贝。
- 浅拷贝:拷贝的是对对象的引用,只复制对象的指针,不复制对象本身,共享一块内存,修改新对象旧对象也发生改变
- 深拷贝:创建一个一模一样的对象,新对象和旧对象之间不共享内存,修改新对象旧对象不改变
reverse()
颠倒数组排列顺序,返回改变后的数组,改变原数组
var a = ['a', 'b', 'c']; a.reverse() // ["c", "b", "a"] a // ["c", "b", "a"]
slice()
截取目标数组的某一部分
arr.slice(start, end);
前包后不包
返回值为截取出来的元素的集合
原数组不发生改变
没有参数实际等于返回一个原数组的拷贝
var a = ['a', 'b', 'c'];
a.slice(0) // ["a", "b", "c"]
a.slice(1) // ["b", "c"]
a.slice(1, 2) // ["b"]
a.slice(2, 6) // ["c"]
a.slice() // ["a", "b", "c"]
如果参数是负数,则表示倒数计算位置
var a = ['a', 'b', 'c'];
a.slice(-2) // ["b", "c"]
a.slice(-2, -1) // ["b"]
-2表示倒数计算的的一个位置
splice()
用于删除原数组的一部分元素,并可以在原数组位置添加新的元素,返回被删除的元素,会改变原数组
arr.splice()
- 1.删除的起始位置
- 2.被删除的元素个数
- 后面还有参数的话表示要被插入的新元素
起始位置如果是负数,表示从倒数位置开始删除
如果只有一个参数,等同于将原数组拆成2个数组
var a = [1, 2, 3, 4];
a.splice(2) // [3, 4] a // [1, 2]
sort()
对数组元素进行排序
默认按照字典顺序排序,原数组将改变
默认排序顺序是在将元素转换为字符串,然后比较它们的 UTF-16 代码单元值序列时构建的
可以按照自定义顺序排序可以传入一个函数作为参数。
参数函数本身接收2个参数,表示要进行比较的两个数组成员,如果返回值大于0,表示第一个字排在第二个值后面
var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
return a - b; //升序
return b - a;//降序 });
console.log(numbers);
[
{ 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 } // ]
map()
将数组的所有元素依次传入参数函数。然后将每次的执行结果组成一个新的数组返回。
var numbers = [1, 2, 3];
numbers.map(function (n) {
return n + 1;
}); // [2, 3, 4] numbers // [1, 2, 3]
原数组没有变化
map()接收一个函数作为参数(回调函数),该函数调用时,map()方法向他传入3个参数(回调函数的三个参数):当前元素,当前位置,数组本身。
[1, 2, 3].map(function(elem, index, arr) {
return elem * index;
}); // [0, 2, 6]
map()还接收第二个参数,用来绑定回调函数内部的this,将回调函数内部的this对象,指向第二个参数
var arr = ['a', 'b', 'c'];
[1, 2].map(function (e) {
return this[e];
}, arr)
// ['b', 'c']
forEach()
forEach和map类似,但是没有返回值,只用来操作数据,如果遍历数组的目的是为了得到返回值,那么使用map()方法,否则使用forEach()方法。
forEach也接受第二个参数,绑定参数函数的this变量。
注意,forEach()方法无法中断执行,总是会将所有成员遍历完。如果希望符合某种条件时,就中断遍历,要使用for循环。
filter()
过滤数组成员,满足条件的成员返回一个新的数组。
他的参数是一个函数,所有数组元素依次执行该函数。返回结果为true的元素组成一个新数组返回,该方法不会改变原数组。
[1, 2, 3, 4, 5].filter(function (elem) {
return (elem > 3);
})
filter方法的函数接受三个参数:当前元素,当前索引,整个数组
[1, 2, 3, 4, 5].filter(function (elem, index, arr) {
return index % 2 === 0;
}); // [1, 3, 5]
还可以接受第二个参数,用来绑定参数函数内部的this变量
var obj = { MAX: 3 };
var myFilter = function (item) {
if (item > this.MAX) return true; };
var arr = [2, 8, 3, 4, 1, 3, 2, 9];
arr.filter(myFilter, obj) // [8, 4, 9]