1.什么是数组
内存中连续存储多个数据的存储空间,再起一个名字。
2.创建数组
1.创建空数组
如果创建数组时,暂时不知道数组的内容。
var arr1 = [];
var arr2 = new Array();
console.log(arr1); //[]
console.log(arr2); //[]
2.创建数组同事初始化数组元素
如果创建数组时,已经知道数组的内容。
var arr1 = [1,2,3,4];
var arr2 = new Array(1,2,3,4);
console.log(arr1); //[1,2,3,4]
console.log(arr2); //[1,2,3,4]
3.创建n个元素的空数组
如果创建数组时,只知道数组的长度,不知道数组的内容。
var arr = new Array(5);
console.log(arr.length) //5
3.访问数组
根据下标来访问,从0到length-1
var arr = [1,2,3];
console.log(arr[0],arr[1],arr[2]); // 1,2,3
console.log(arr[3]) //如果超过了数组的下标 输出undefined
//如果直接赋值
arr[3] = 4;
console.log(arr); //[1,2,3,4]
//则会自动将原数组长度+1
4.数组属性
1.arr.length始终等于最大下标+1
var arr = [1,2,3];
console.log(arr.length); //3
console.log(arr[length-1])//获取最后一个元素 3
console.log(arr[length-n])//获取倒数第n个元素
arr.length = 4 //末尾追加一个新元素4
arr.length-- //删除末尾第一个元素
arr.length-= n //删除末尾第n个元素
arr.length = 0 //清空数组
5.数组方法
1.arr.push() 在数组末尾添加一个或多个元素,返回数组的长度
var arr = [1,2];
arr.push(3);//**改变原数组** 末尾添加3
console.log(arr);//[1,2,3]
console.log(arr.push(4,5)) //末尾添加4,5 返回数组的长度 5
2.arr.pop() 在数组末尾删除一个元素,返回删除的元素
var arr = [1,2,3];
arr.pop();//**改变原数组** 删除3
console.log(arr);//[1,2]
console.log(arr.pop()) // 删除2 返回数组的长度 1
3.arr.unshift() 在数组开头添加一个或多个元素,返回数组的长度
var arr = [1,2];
arr.unshift(3);//**改变原数组** 开头添加3
console.log(arr);//[3,1,2]
console.log(arr.unshift(4,5)) //开头添加4,5 返回数组的长度 5
4.arr.shift() 在数组开头删除一个元素,返回删除的元素
var arr = [1,2,3];
arr.shift();//**改变原数组** 删除1
console.log(arr);//[2,3]
console.log(arr.shift()) //删除2 返回删除的元素 2
5.arr.concat() 拼接数组,返回新的数组
var arr = [1,2,3];
arr.concat([4,5]);//**不改变原数组** [1,2,3,4,5]
arr.concat([1,2],[3]) // [1,2,3,1,2,3]
arr.concat();//**浅拷贝数组**
5.arr.join(“连接符”) 每个元素转为字符串,自定义连接符(默认逗号连接),返回字符串
var arr = [1,2,3];
arr.join("");// "123"
arr.join("+") // "1+2+3"
arr.join("")==="" //判断是否是空数组
6.arr.slice(start,end+1) 选取下标从start到end位置的元素,返回新数组
var arr = [1,2,3];
var arr1 = arr.slice(1,2);// 含头不含尾 2
var arr2 = arr.slice(-2,-1);// 2
//省略第二个参数 从start选取到结尾
var arr3 = arr.slice(1) // [2,3]
//省略全部参数 复制数组
var arr4 = arr.slice()
//用途 将类数组对象转化为数组对象
Array.prototype.slice.call(arguments)
//相当于
arguments.slice()
7.arr.splice(start,n,值1,值2) 从start位置删除n个元素,然后将删除的元素替换为值1,值2 强调:直接修改原数组
var arr = [1,2,3,4,5,6];
//删除
arr.splice(1,2);//直接删除2,3 返回被删除的元素 [2,3]
//arr [1,4,5,6]
//插入
arr.splice(1,0,2,3) //从1位置开始插入两个元素 返回被删除的元素 没有则为[]
//arr [1,2,3,4,5,6]
//替换
arr.splice(1,2,6,6)//从1位置开始替换元素 返回被删除的[2,3]
//arr [1,6,6,4,5,6]
//固定套路---广告轮播
//移除开头的n元素拼接到结尾
imgs=imgs.concat(imgs.splice(0,n))
//移除结尾的n个元素拼接到开头
imgs=imgs.splice(-n).concat(imgs)
8.arr.reverse() 翻转数组
var arr = [1,2,3,4,5];
arr.reverse(); //改变原数组
//arr [5,4,3,2,1]
9.arr.sort() 数组排序
var arr = [7,2,1,6,5];
arr.sort(); //改变原数组
//缺点 只能按照字符串升序排列
//数字会先被转成字符串 然后在根据字符串排列规则排列
//解决办法
arr.sort(function(a,b){return a-b})
//等同于
arr.sort((a,b)=>a-b) //升序
arr.sort((a,b)=>b-a) //降序
JS中没有专门的栈和队列的模型,都是用普通数组模拟的
栈:一端封闭只能从另一端进出的数组 pop、 push、 unshift、 shift
队列:只能从结尾进入开头出
9.arr.indexOf(item)
arr.lastIndexOf(item)
从开头查找item第一次出现的索引,若存在,返回索引,不存在,返回-1
var arr = [1,2,3,1,5];
arr.indexOf(1) //返回下标0
arr.indexOf(7) //找不到 返回-1
arr.lastIndexOf(1) //返回下标3
9.arr.find() 找出满足条件的第一个值
arr.findIndex() 找出满足条件的第一个值的索引
var arr = [1,2,3,1,5];
arr.find( a => a > 2) //返回3
arr.findIndex( a => a > 2)//返回索引2
10.arr.forEach(callback) 对每个元素调用一次函数
var arr = [1,2,3,1,5];
arr.forEach( function(value,index,arr) {
console.log(value) 1 2 3 1 5
console.log(index) 0 1 2 3 4
console.log(arr) [1,2,3,1,5]
} )
11.arr.filter() 筛选满足条件的元素 不改变原数组
var arr = [1,2,3,1,5,9,10];
arr.filter( item => item>5 ) //返回[9,10]
12.Array.isArray() 判断是否是数组
var arr = [1,2,3,1,5,9,10];
Array.isArray(arr) //true
13.arr.reduce()
var arr = [10,11,12,13,14]
arr.reduce((per , cur , index , arr)=>{
/*per => previousValue => 上一次调用回调返回的值,或者是提供的初始值
cur => currentValue => 数组中当前被处理的元素
index => index => 当前元素在数组中的索引值
arr => arr => 调用的原数组*/
console.log(per , cur , index , arr)
return per + cur //如果不加return per会出现4次undefined
})
14.arr.map()
var arr = [1,2,3,4,5]
var newArr = arr.map( item => item*item )
//[1,4,,9,16,25]
稍微整理一下,以后多写博客。