首页 > 代码库 > js中对数组的操作-------Day49
js中对数组的操作-------Day49
今天碰到了一个问题:easyui的使用中,datagrid表格的高度如何改变(设定成一个固定的高度),看了半天文档,也从网上查了些,还楞是没弄出来,有点小郁闷,这easyui在某些情况情况下确实好用了,可要随意调整实在是有些麻烦啊。
做不出就先放放,回家了就换个心情。
昨天在回放拖拽轨迹的实现中,对数组的应用成了关键的一步,于是特意查看了一些javascript对数组的操作,这里来记录下:
“增删改查”这四个字相信都不陌生,我们绝大多数的工作都是在进行这些操作,而这些操作却有一个大前提:存在,存在一个让你增删改查的对象,如果不存在,那我们就先来创建一个:
1、创建
var a=new Array(); var b=new Array(3); var c=new Array(['qwe',"12313",123]); var d=["asd","qwe","zxc"];
通常我们创建一个数组的方式为上面四种,然后
*alert(a+"----------"+b+"---"+c+"--------"+d);
这样我们可以清晰的看到,第一个是空的,而第二个有两个逗号“,”则说明有3个空,后面的则是正常输出,但是
*alert(typeof(a)+"----------"+typeof(b)+"---"+typeof(c)+"--------"+typeof(d))来看,我们都成功的创建了一个对象。
创建过程中我们存在四种方法,究竟哪一种更好呢,我们没法评判,不同情况下各有千秋吧,但有一种情况我们需要特别注意
var test01=new Array(3); var test02=new Array([3]);
其实这颇有些迷惑性,不过一个中括号,意义却不相同,
前一个为创建一个length长度为3的数组,后一个则为创建一个长度为1,且第一个值为3的数组,这样放在一起的话可能我们都明白,可是就给你任何其中一个,如果不仔细,极有可能出错呢。
而另一方面new Array([5,2])和[5,2]这两个数组相同么,且在查看中解答。
2、查看
既然创建成功了,我们就可以查看这个对象的属性或者值,或者其它。首先我们知道查看一个数组最好的方式是将它遍历出来,通常的写法应该为:
for(var i=0;i<d.length,i++){ alert(d[i]); }这里就不一一展示了,只记录几个颇为迷惑的地方:
*alert(a[0]+"-----"+b[0]+"---"+c[0]+"-----"+d[0]+a[2]+"-----"+b[2]+"---"+c[2]+"-----"+d[2]);这样我们来看输出结果
这里我们就解决了上面创建中的问题,new Array(【5,2】)和【5,2】还是不一样,前者表示说创建了一个数组,数组含有一个元素,而后者则说明创建了两个元素,分别为“5”和“2”,其实用前面的来表示后面的话,应该写为:var e=new Array([‘5‘],[2],);
于是我写下了这样一个输出
var e=new Array(['qwe'],["12312"],[123]); var f=[["1","2"],["2","3"]]*alert(a[0]+"-----"+b[0]+"---"+c[0]+"-----"+d[0]+a[2]+"-----"+b[2]+"---"+c[2]+"-----"+d[2]+"---"+e[0]+"--"+f[0]);结合上面的来看的话,你猜结果会是什么?
这样原理就更清楚了吧,可是有一点我却还是有些疑惑:
var d=["asd","qwe",123]; var e=new Array('qwe',"12312",123);***如果我们输出alert(e[2]+"---"+typeof[e[2]]+“--”+d[2]+"---"+typeof(d[2]));结果为什么都是123,却一个是object,一个是number呢?还是有些小疑惑
而如果var t=e【2】,再输出typeof(t),也是number了就,这是为什么呢?
3、删除
如果上面原理上多点,那么这里就多记些方法吧
.pop()这个昨天就应用了,删除数组的最后一个元素值,并返回该元素值,public object pop(){这里是删除最后一个的实现;return object}
shift()有了删除最后一个,就比较关注第一个,有头有尾嘛,这个方法就是用来删除第一个元素,并返回第该元素值的操作;
.splice(here,num,newItem,newItem2,...)这个方法存在参数,总体的意义是删除第几位到第几位被,并以以数组形式将删除的值返回,而参数第一位是在数组的第几位开始数,开始删除,这里是从0开始数的,第二个参数则是数几位,如果为0,则不进行删除,如果为1,则从开始数的那位开始只查1个数值,依次论推,而如果后面再跟参数的话,那就应该到了添加的范畴里了,这里先一并解释下,就是进行完之前的操作之后,再在刚才的操作位插入后面的参数,即新的数值。
4、增加
前面竟然介绍到了splice,这里就该说增加了,splice在一定程度上就是增加,如果第2个参数为0,同时还存在第3个或者更多的参数时,它就是增加,另外如果第2个参数不为0,同时还有更多参数的话,那就是修改了,所以修改就不再单独说了。
而之前用过的.push()则是在数组末尾添加
相对的.unshift()则是在数组的最前端进行添加,跟删除也就对应起来了吧
5、排序
不得不说,这曾是个惨痛的教训,在那个冒泡排序还不熟悉的时候,曾经用过这个方法进行过排序,但是面试的时候,愣是两个一个都没有想起来,反序啊还是自己你憋了半天写的丑陋不堪的,多么痛的领悟啊当时是
.sort()多么痛的领悟啊
.reverse()反序,最前面的放最后面了,最后面的到最前面了,多么痛的领悟啊
6、数组的截取、合并和拷贝
.slice(start,[end]),这个的应用让我想起了subString(start,[end]),这里是生成的一个新的,一个新的,是new了一个哦
.concat()拼接,都是返回的新的哦,拼接之后的,new个的新的哦,新的哦
这里暂时还记录这么多吧,也没查到太多有用的操作,这里附上个小知识:
typeof()的返回值有六个:number /string /boolean /object /function /undefined(还记得它和null的区别么)
天之道,损有余而补不足.....你想起了谁,大侠郭靖啊,只要有颗向上的心,总能看到太阳升起的那刻....