数组
数组是有序的元素序列,可以存储多个值
怎么理解:
即一个变量 存储多个值
数组是线性的:除了第一个元素,每一个元素都有一个前驱元素,除了最后一个元素,每一个元素都有一个后驱元素
声明
语法糖: array
var arr = [];
var arr=[1,2,3,4,5,6,87];
构造函数写法:
var arr = new Array();
var arr = new Array(1,2,3,4,5);
使用
如何获取数组中的元素
因为数组是线性的,所以 数组中的每一个元素,在数组中都有自己的位置 如第一个 最后一个 第二个...
位置:下标 从0开始
获取数组中的元素
arr[下标]
数组length属性
获取数组的长度 (元素的个数)
数组元素的赋值
arr[下标]=值
1,原来就有 覆盖原来的值
2,原来没有 定义个一个新的位置 上定义的一个新值
注意
var arr = [1,2,3]
alert(arr[4]);
访问数组中的元素时,如果长度超出了
undefined
数组常用api
api Application Programming Interface
应用程序接口
对象的方法
push()
末尾添加 可以是以,隔开的多个值
pop()
末尾删除 调用一次就删除一个
返回值:就是删除的数组元素
unshift()
开头添加 可以以,隔开的多个值
shift()
开头删除
返回值:删除的元素
总结:以上四个api都是会直接改变原数组 不是只读的
concat 连接数组 (将两个小的数组或者一个数组和其他值 拼成一个大的数组)
var newArr = arr.concat(连接的值);
reverse() 不是 颠倒数组 不是排序
var arr=[2,5,7,8];
arr.reverse() [8,7,5,2]
sort() 排序
默认是按照字符串 进行排序 (首字符大小 进行排序)
如果需要按照数字排序:需要 一个 排序规则的函数
function compare(a,b){
return a-b; //升序
return b-a; //降序
}
join() 将数组转换成字符串
注意:join可以传参 ,参数是值 分隔符 ,如果不传参 默认是 ,分割
只读的
splice() 不是只读
功能: 删除 替换 插入
第一个参数 : 从哪里开始删除
第二个参数:删除几个
后面的参数 : 插入的值
总结:如果参数只有两个 执行的是删除操作
如果有多个参数主要看 第二个参数
如果为0 执行的是插入
如果不为0执行的是替换
slice(starti[,endi+1]) 只读 切割数组 得到子数组
starti:开始截取的位置 下标
endi:结束的位置
总结:含头不含尾
如果第二个参数省略,默认从starti开始后面全部截取
总结:
push() pop() unshift() shift() sort() splice() slice() 这几个要常用一点
es5新增数组相关api
indexOf(data[,starti]) 查找关键字
第一个参数:需要查找的关键字
第二个参数:从哪里开始查找,默认是开始位置查找
顺序从前往后
不能全局查找,遇到第一个复合条件的元素就立即返回
var arr=[1,2,3,4,5,7,8,98,9,0,0,'tmd',0,7];
lastIndexOf(data)
找到了返回结果所在的下标,找不到返回-1
顺序:从后往前找
不能全局查找,遇到第一个复合条件的元素就立即返回
forEach()循环
arr.forEach(function(item,index,arr){
//item每一次遍历的数组的元素
//index是下标 arr是数组本身
});
forEach能否取代普通for循环
遍历过程中,因为某些条件要终止循环
var arr=[1,2,0,4,8,32,5,35,6];
for(var i=0;i<arr.length;i++){
if(arr[i]==0){
break;
}
}
map() 遍历当前数组,返回新数组
var arr=[1,2,3,4,5];
//[2,4,6,8,10]
var newArr = arr.map(function(item,index){
return item+2;
});
console.log(newArr);
filter 过滤 得到复合条件新数组
var newArr = arr.filter(function(item,index){
return 条件;
});
every() 条件判断,判断数组中的每一个元素是不是都满足某个条件,如果都满足返回true,否则返回false
var bool =arr.every(function(item,index){
return 条件
});
some()条件判断,判断数组中的某一个元素是不是都满足某个条件,如果都满足返回true,否则返回false
var bool =arr.every(function(item,index){
return 条件
});
二维数组
数组中的每一个元素也是数组
var arr=[
[1,2,3],
[4,5,6],
[7,8,9],
[1,2,3,4,5,6,7]
...
];
怎么遍历二维数组
var arr=[
[1,2,3],
[4,5,6,7],
[10,20,30,40,60,80]
];
for(var r=0;r<arr.length;r++){
for(var c=0;c<arr[r].length;c++){
console.log(arr[r][c]);
}
}
怎么访问二维数组中的元素
arr[r][c]
思考问题
var arr=[
[1,2,3],
[5,6],
[7]
];
arr[0][5] //undefined
arr[5][1] //报错
二维数组:列下标 可以超出 行下标不可以
var obj={
name:"小明"
}
var a="name";
obj[a]
hash数组(关联数组)
普通数组下标:0123456789
概念:自定义下标的数组
声明:
var hashArr = [];
hashArr['a']='tom';
hashArr['b']='jerry';
hashArr['c']='tony';
使用:
hashArr['a']
对象其实就是关联数组
对象的严格写法:属性名必须加 "" 双引号,对象的属性名方法名其实是字符串
注意:
关联数组的length属性是无效的
json
js对象表示法 json 不是js语法,语言通用(模仿js对象的写法 储存数据格式)
数据格式 用于传输数据的(前后台)
json是js对象的严格语法:
键和值得一一对应关系
属性名(键)是需要加 ""
var json={
"name":"小明",
"age":18,
"gender":"男"
}