概念
对象中可以通过储存多个数据,且数据类型是没有限制的,所以通常我们会在里面储存一个商品信息或者一个人的信息
var obj={
商品信息或者人的信息
}
这种储存方式我们没办法通过一个人的姓名去获取这个人的信息,也没有办法通过一个编号获取到信息
js给我们提供了一种对象类型的数据,可以通过编号来储存数据:数组,也是对象三种表现方式之一,[]定义的对象
定义
数组这种数据,相对于在一个大空间之中,有很多小空间,每个值前面的数字,表示这个小空间的编号,专业术语叫下标,第一个下标永远是0,依次向后递增,最后一个下标是值的个数:1
创建数组
构造函数创建数组
var obj=new Array(数据)
直接创建
var obj=[]
数组的基本操作
数组的个数:数组名.length
添加数据
var obj=[]
修改元素
数据名[下标]=值
arr[0]="修改的新值"
删除元素
delete 数组名[下标]
注意,此种方式一次只能删除一个,并且,被删掉的元素的空间会显示空也就是undefined
delete 数组名[下标]
数组长度的赋值:
var arr = [1,2,3]
arr.length = 0
console.log(arr) // []
遍历数组
两种方式:
for循环
for in循环
语法
for(var i=0;i<arr.length;i++){
}
这种遍历方式,可以将数组之中的每个元素都经历一次
for in循环遍历数组
for in 数组名
语法
for(var i in 数组名){
}
for 和 for in 的区别
for循环,遍历到空数组时,会显示undefined,而for in循环不会遍历空数组
类型
两种类型:
基础类型:number string undefined null boolean
引用类型:{} [] function
两者的区别
1.储存方式不同:
基本类型将值存入栈内存之中,引用类型将值存入堆内存之中,将堆内存的地址存放在栈内存之中
2.赋值过程不同
基本类型赋值是将整个数据复制给另一个变量,一个数据改变不会影响到另一个变量,两者互不影响
引用类型赋值其实不是把数据赋值给他,而是把自己的地址值赋给另一个变量,如果一个改变,那么另一个也会跟着改变,两者互相影响
数组的方法
在数组中开头添加元素
语法
for(var i=0 ; i<arr.length;i++){
var 创建的变量 = 数组名 . unshift
}
在数组末尾添加一个元素/多个元素
语法
for(var i=0;i<arr.length;i++){
var 变量名= 数组名.push(添加的新值)
}
删除数组第一个元素 返回被删的元素----》shift
语法
var 变量名=[]
var 变量名=数组名.shift()
删除数组最后一个元素,返回被删掉的元素
语法
var 变量名=[]
var 变量名= 数组名.pop()
对数组任意的增,删,改操作
语法
var 变量名= []
变量名 .splice(开始下标,删除的个数,删除后替换的新值)
数组的拼接
语法
var arr1=[]
var arr2=[]
var 创建的变量= arr1.concat(arr2)
数组的排序 -----》sort
语法
var arr=[]
arr.sort()
数组的翻转
语法
var arr=[数据]
arr.reverse()
连接字符串 ------》join
语法
var arr=[数据]
var str=arr.join(自定义连接符)
截取数组
语法
var arr=[数据]
arr。slice(开始下标,结束下标)
查找元素第一次出现时的下标
语法
arr.indexOf(元素,开始寻找时候的下标)
注意,找到了返回的是元素的下标,没找到返回的是-1
lastindexOf方法
查找元素最后一次出现时的下标
语法和indexOfcbd
arr.indexOf(元素,开始寻找时候的下标)
forEcah方法
用于遍历数组
语法
arr.forEcah(function(val---值,下标----》index,当前数组--》Array){
})
注意,这个方法是没有返回值的,返回值为undefined,不hi改变原数组
map方法
遍历数组,并将所有元素经过函数处理之后,形成新的元素,所有新元素组成新数组返回
语法
arr.forEcah(function(val---值,下标----》index,当前数组--》Array){
return 新的值
})
注意,这个方法注意用于以同样的规则处理数组中的每个值,并且形成新的数组
filter方法
将数组中满足条件的值,组成新的数组返回
语法
arr.forEcah(function(val---值,下标----》index,当前数组--》Array){
return 筛选条件
})
注意,使用方法和功能跟map方法很像,只是运行规则不一样。map方法中的函数,用于返回新的元素,而filter方法中的函数,根据返回true或false来筛选元素
reduce方法
用于数组求和
语法
arr.forEach(function(a,b){
return 条件
})
其中a第一次的时候,表示第一个元素,第二次开始表示上一次返回的数据,b第一次表示第二个元素,第二个开始表示第三个元素、第四个元素。。。
判断数组中是否至少有一个满足指定条件的,返回布尔值 ----》some
语法
布尔值 = 数组.some(function(v,i,a){
return 条件
})
some内置的原理,遍历数组,判断每个值是否满足条件,有满足的就返回true,并break循环,遍历完以后都没有一个是满足的,返回false
判断数组中是否所有元素都满足指定条件,返回布尔值
语法
布尔值 = 数组.every(function(){
return 条件
})
查找数组中第一个满足条件的值,找到了返回值,没找到返回undefined ----》find
语法
值=数组.find(function(v,i,a){
return 条件
})
find的原理,遍历数组,判断每个元素是否满足条件,满足就返回这个元素,并break循环,如果遍历完了都没有满足条件的,就返回undefined
findindex
下标=数组.findindex(function(v,i,a){
return 条件
})
findIndex的原理,遍历数组,判断每个元素是否满足条件,满足就返回这个元素的下标,并break循环,如果遍历完了都没有满足条件的,就返回-1
冒泡排序
相邻两个元素进行比较,将一个数组中所有的数字使用循环进行排序
for(var i=0
for(var j=0
if(arr[i]>arr[i+1]{
var m=arr[i+1]
arr[i+1]=arr[i]
arr[i]=m
}
}
}
选择排序
for(var i=0
for(var j=j+1
if(arr[i]>arr[j]{
var t=arr[j]
arr[j]=arr[i]
arr[i]=t
}
}
}