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的差别么)


天之道。损有余而补不足.....你想起了谁,大侠郭靖啊。仅仅要有颗向上的心,总能看到太阳升起的那刻....



原文地址:https://www.cnblogs.com/gccbuaa/p/6962096.html