什么是数组
数组也是对象,它与普通对象类似都是用来存储值的。不同的是对象的属性是字符串,而数组是通过数字索引来进行定义的。
数组就是一组数据的集合[1,2,3,4,5]
数组中的每一向都有对应的顺序,每一项都有对应的下标
数组于对象的区别:
与创建对象不同的是,构造函数创建数组可以直接添加数组项,构造函数创建对象时只能在下面通过对象.添加属性。
2.字面量创建数组[]
可以单独在下面去加数组每一项arr[0]数组索引[0],[1]...从0开始的整数:
从0开始0是第一项
1是第二项
... ...
如果设置不是从0开始,空缺的项显示empty,如果查看空缺项,返回undefined
arr.length 当数组是连续数组时索引值(0开始正整数)获取并返回数组个数。当不是里连续数组项时,length获取到的是最大索引+1的值。
修改length长度大于原长度多出来部分就会空出来,返回空项值是undefined。
当length长度小于元素组长度,会把数组中多余的项删除
arr.length获取并返回数组个数
不同的是对象的属性是字符串,而数组是通过数字索引(0开始的正整数)来进行定义
数组比普通对象存储性能要好。开发中经常是用数组来存储数据
数组内可以放所有基础数据,也可以放对象,对象里也可以放数组。
arr[0]指的是数组的第一项,arr[1]指的是数组的第二项... ...
创建数组的方法:
1.构造函数创建
var arr= new Array();
2.数组字面创建
var arr = [];
arr[0] = 1;
arr[2] = 2;
3.字面量直接加属性
var arr = [1,2,3,2,4];
数组.length是数组长度同时也是数组个数如果想遍历数组每一项,数组.length可以作为循环范围
数组方法:
红字的是最常用的三个:push,splice,map
concat()连接两个或更多的数组,并返回结果。
join() 数字转为字符串
——将数组的每项元素通过符串进行连接
join(",/-/*") 1-2-3-4
分把数组的所有元素放入一个字符串。元素通过指定的分隔符进行隔。
pop() 删除并返回数组的最后一个元素,并将删除的数组项返回
pop(素组[下标])
push() 向数组的末尾添加一个或多个元素,并返回新的长度。能改变原数组。
push(添加的内容)
reverse() 颠倒数组中元素的顺序。
reverse(数组)
shift() 从前面删除一个,并将删除的数组项返回回来。
shift(数组[下标])
slice() 可以用来从数组中提取指定的元素,不会改变原数组,而是将街区的元素封装到一个新数组返回。
1.截取开始位置索引,包含开始索引
2.截取结束位置索引,不包括结束索引
-第二个不写结束索引,此时会开始索引到最后的所有元素。
-索引可以传负值
方法:slice(开始(必选),结束(可选))
sort() 对数组中的元素进行排序
-如果数组中元素都是个位数 数字排序就正常按照数字大小来排。如果两位数字包括两位的时候,sort只会排列第一位数字的大小顺序。
列如:10,22,33,55,25,1569
排序后:10,1569,22,25,33,55
——如果数字的个数相同的数字
列如:33,24,56,74,34,45
如果是字母:abcdefg...这些事按照26个字母排列顺序。如果是多个字母的单词排列顺序还是按照字母排列的。
除了数字以外的字母,汉字,特殊符号都是按照unicode编码编号来排的
splice()可以删除数组中的元素,并向数组中添加新的元素(删除,添加)
-使用splice会影响原数组,会将数组元素从原数组删除,并将被删除的元素作为返回值返回。
-参数:
第一个值开始位置索引
第二个值是删除的个数/数量
第三个级以后的项可以向数组中添加新的元素。
splice(开始的下标,删除几个)
常用于删除,修改数据
unshift() 从数组前面添加一个或多个数组项,并将数组及数量返回。
//unshift(内容,内容);注:用 , 隔开
concat()
-合并数组,不改变原数组
语法:数组1.concat(数组2);
-在数组后面添加元素 语法:数组.concat('11','22');
-当数组里面是基本数据类型时,通过concat可以实现深拷贝
split()将字符串分割成数组,
——可以根据字符串中某个字符分割,
如:
asdfljsds split('d');
['as','fljs','s'],以哪个字符分割这个字符就没了
indexOf()查询数组中的项,返回其索引值
参数:indexOf(要找的项,开始点)
第一个是要找的项。
第二个是从哪开始查找,写的时索引值。
var arr = [1,2,3,2,1]
arr.indexOf(2); //1 查找值为 2 的元素,结果在索引 1
arr.indexOf(99); //-1 查找值为 99 的元素, 没有找到返回 -1
arr.indexOf(1,1) //4 查找值为 1 的元素从索引 1 开始查找返回 索引 4
arr.lastIndexOf(2) //3 查找值为 2 的元素从右向左查找返回结果在索引 3
下面的方法为函数形式:
map(react的循环渲染)
数组映射(不改变原数组)
比如想给数组中每一个元素做一个转换
var arr =[1,2,3];
arr.map(function() {
return x + 10
}) //[11,12,13]
console.log(arr); //[1,2,3]
把一个函数作为参数传入 map
该函数在每次遍历元素的时候调用
filter数组过滤(不改变原数组)
var arr = [1,2,3,4,5,6,7,8,9,10];
arr.filter(function(x,index) {
return index % 3 === 0 || x >= 8;
}) // [1,4,7,8,9,10]
console.log(arr) //[1,2,3,4,5,6,7,8,9,10]
every数组判断
判断数组中每一项元素是否符合条件
var arr = [1,2,3,4,5];
arr.every(function(x) {
return x < 10;
}) //true
arr.every(function(x) {
return x < 3;
}) //false
some判断数组中任意一项元素是否符合条件
var arr = [1,2,3,4,5];
arr.some(function(x) {
return x ==== 3;
}) //true
arr.some(function(x) {
return x === 100;
}) //false
reduce
把数组聚合成某种结果(不改变原数组)
var arr = [1,2,3];
var sum = arr.reduce(function(x,y) {
return x + y
},0) //6
arr //[1,2,3]
isArray
判断是否为数组
注意这里是 Array.isArray是 Array 构造器对象上的属性
还可以用
[] instanceof Array; //true