Array
数组新建方法
- 新建数组
var a =[1,2];
- 构造函数:
let a = new Array('1')
,传入单个数字生成多少个空位,其余类型作为数组的元素
静态方法
- 判断是否为数组 Array.isArray()
实例方法:
push()
在数组前在数组最后一个位置添加元素,返回数组长度,改变原数组
pop()
删除并返回数组的最后一个元素,改变原数组
shift()
删除并返回数组第一个元素,改变原数组
unshift()
在数组第一个位置添加元素,返回数组长度,改变原数组
join()
拼接数组成字符串,根据传入的参数作为分隔符,不提供参数默认逗号分隔,由此也有了许多的妙用:
数组转字符串:
var a = [1, 2, 3, 4];
a.join() // "1,2,3,4"
concat()
多个数组合并,将传入的参数添加到原数组
reverse()
颠倒数组顺序并返回
slice()
提取数组一部分,包含左边不含右边,省略第二个参数,一直返回到最后;一个参数都没有,返回原数组拷贝
Array.prototype.slice.call({ 0: 'a', 1: 'b', length: 2 })
// ['a', 'b']
Array.prototype.slice.call(document.querySelectorAll("div"));
Array.prototype.slice.call(arguments);
splice()
删除原数组元素,还可以新增元素,返回被删的元素,改变原数组
let a = [4,3,2,1]
a.splice(2,1)
log(a) // [4,3,1].
sort()
字典序排序,也可传入函数,改变原数组
[10111, 1101, 111].sort(function (a, b) {
return a - b;
})// [111, 1101, 10111]
- map() 遍历执行每一个元素,将处理后的元素组成新的数组返回
let arr = numbers.map(function (n) {
return n + 1;
});
- forEach() 与map() 类似,但无返回值,改变原数组
- filter() 过滤数组元素,过滤后的元素组成新数组返回
[1, 2, 3, 4, 5].filter(function (elem) {
return (elem > 3);
})
some() every() ,some()
数组元素只要一个满足条件返回true,every()所有元素都满足条件才返回true
reduce(), reduceRight()
依次处理两个元素,最终返回运算值,例如计算数组中元素之和:
reduceRight() 只是和reduce()处理顺序相反,是从右往左处理元素
let res= [1,2,3,4].reduce((a,b)=>{
return a+b;
} //10
数组拷贝:
关于数组复制一个坑点,不要使用 new Array() 的方法,只做到浅拷贝:
let a = [1, 2, 3, 4]
let b =new Array(a);
a.pop(); //[1,2,3]
深拷贝
slice()
let a = [1, 2, 3, 4]
let b =a.slice();
a.pop(); //[1,2,3,4]
concat()
let a = [1, 2, 3, 4]
let b =a.concat();
a.pop(); //[1,2,3,4]
扩展运算符
let a = [1, 2, 3, 4]
let [...b] =a;
a.pop(); //[1,2,3,4]
数组实例方法返回值
类似 push() pop() shift() unshift() splice() forEach()改变原数组的方法,返回的都不会是一个数组
若直接用在函数传参时会导致错误
func(arr.push(a)) //其实传入的数组长度
//正确做法
arr.push(a)
func(arr)
- sort() 是个例外,改变原数组同时也返回新数组
- map() 中会返回一个新的数组,而forEach()无返回,直接改变原有的值