要学数组,那么在这之前,首先要对他的定义有所了解——Array,可以存储一组数据的结构。其特点在于:有下标,有长度,按照一定的结构顺序存储(便于查询)。声明的方式如下:
1、var arr=[1,2,3,4]
2、var arr=new Array(3); 需要注意的是,Array 必须大写,其为js内置对象,(4)表示声明数组空间个数(此处为4)
3、var arr=Array();
以上三种方法,个人推荐使用 方法1!!!
在这里顺便引入一下 var a=Array([1,2,3])可以等价于 var a=[[1,2,3]]。一个【】(此处为中文方括号,代码需要英文格式下的)表示的是一维数组。【【1】】,而现在呢,则是一个二维数组。【【【1】】】,现下?没错三维,以此类推,多维数组就是这般。【1【2【3】】】请问,1,2,3分别对应几维数组?答案是,一维(1)二维(2)三维(3),看所在反括号的层次。
还有需要注意!!!a[1,2,3,4],数组内有四组数字是不是?那么,a[1]=多少呢??
很遗憾不是1,而是2!!!其原因在于数组的下标问题,刚刚出现的a[1]里的1是数字的下标,a[1,2,3,4]共有四个数,所以共有四个下标。但是数组有一点不一样,那就是它是以0为起始的下标开始计数。所以,我们可以知道a[0],a[1],a[2],a[3]的值,分别是:1,2,3,4。很好。
所以接下来我又要引入一个当我们有很多数据的时候不知道下标下手时,该怎么办??
indexOf属性:寻找数组下标,判断是否有数据(根据下标)。
数据去重(ps:去重=(去除重复))———面试题:数组去重+排序(可以用冒泡,sort)。
indexOf()作用———查到所要找(()括号里为要找数据)数据返回下标,否则-1。
来两题:
使用Array([[]])二维数组声明和赋值个人信息
双循环 取出个人信息 添加到table中
var message=[['刘森',16,'男','帅'],['刘森森',20,'男','帅'],['三木健次郎',22,'男','帅炸了'],['独孤荣森',21,'好男人','这么帅干嘛'],'hhhh'];
// var dd=document.getElementsByClassName('t1')[0];
// var tf;
//单层循环
// for(var i=0;i<message.length;i++){
// document.getElementsByClassName('t1')[i].innerText=message[i];
// }
//双层for in循环 外加 for双循环
var sum=0;
var len=message.length;
var tab = "<table border='1px black' cellspacing='0' width='400px' height='200px'>";
for(var i in message/*=0;i<message.length;i++*/){
// if(message[i][3]==undefined){
// continue;
// }
tab += "<tr>";
for(var j in message[i]/*=0;j<message[i].length;j++*/){
// document.write(message[i][j]+'<br />');
tab+="<td>"+message[i][j]+"</td>";
// document.getElementsByTagName('td')[sum].innerText=message[i][j]
sum++;
}
tab += "</tr>";
}
tab += "</table>";
document.body.innerHTML = tab;
在这里记录一下,挺好玩的,里面的tab的建立,使得table 和tr td能够做到动态添加,只是其中,仍有需要改进的——比如如果单单放入一维数组则会出现误判,想使用if语句来进行更改,却没成功,如果有成功改正的请留言哦!
接下来是关于数组API!
API是数组对象封装好的方法
在大的存储空间 对数据的 增删改查。
var a[1,2,3]
数组长度为3.
1、push
a.push(1)//1,2,3,1//a.push([1])——-1,2,3,[1]。
2、pop
a.pop()//1,2 一次只弹出一个,()内放入什么也没用。
3、shift(前端删)
a.shift()//2,3 数组长度(使用a.length来查看)为2。
4、unshift(前端增) 实战一番 添加===》返回数组的长度
a.unshift(2)// 2,1,2,3 数组长度为4
以上需要多加测试
以下重新定义 var a=[1,2,3,4,5,6,7,8]方便看结果。
slice ====》指定位置的截取 ====》截取部分放入新的数组 slice()截取全部,slice(2,4) 含头不含尾得到结果:3,4 slice(2) 从第三个数开始到后面全部截取:3,4,5,6,7,8
splice ====》指定位置 增删改 (slice能做的,splice也能做,只是比较麻烦)
a.splice(2,5,’e’) 理解一下:2,起始位置,5:从起始位置到此的数据删除, ’e’:为在删除的数据后补上‘e’。后面后面多少数据
join =====》连接,指定内容连接数据
a.join(‘来啊’)====>1来啊2来啊3来啊4来啊5来啊6来啊7来啊8来啊(且为string类型(转成一组字符串))
concat ======》拼接,拼在一起(合并数组) 只能打散一层数组 a.concat(1,2[1,[2,3]]) 得到结果: 1,2,3,4,5,6,7,8,1,2,1,[2,3]
a.concat(1,2)得到结果:1,2,3,4,5,6,7,8,1,2
sort 和 reverse =====》 排序
sort需要注意,它是将比较的东西转换成string
重新定义一个 var a=[1,3,22,5,42]
a.sort();// 1,22,3,42,5 为什么呢???
我们需要了解ASCII的比较机制:
10
2 没错这两个数字的比较,2大。因为,上下对称比较,2比1大。
所以我们在这里需要进行一点小小的处理
console.log(a.sort(function(x,y){
return y-x;(通过相减,将字符型转为数值。)
}));
这般,结果便为:
1,3,22,5,42.
可以了解下ASCII的数字大小写字母比较,数字最小,大写字母次之,小写字母最大!
然后
a.reverse()//42,5,22,3,1 是的,倒过来了。