本文中以javascript语言为例,通过简洁的代码,通俗易懂的语言,比较全面的介绍了编程中数组的基本操作。通过本文可以快速了解数组的多样创建,数组的检测,以及数组的排序问题。
一 数组自面量创建数组
图A 数组字面量创建数组
如图A,通过数组字面量模式创建了两个新数组girlarray和boyarray。数组girlarray包含四个数据项,length长度为4;而数组boyarray为空数组,length长度为0.在对数组进行操作过程中,toString()方法可以返回数组的字符串形式,而valueOf()方法则返回数组。值得注意的是,在数组末尾项,建议不要加逗号,避免因浏览器的差异,产生有歧义的结果。
二 测试数组
如图B isArray()方法测试数组
如图B,利用Array.isArray()方法测试对象,确认是否为数组。若为数组,便可对数组进行不同场景的操作。相比于instanceof操作符,Array.isArray()方法对于检测数组,功能更加完善。不管数组是否是在多个全局环境中,Array.isArray()方法都可以准确的判断某值是否是数组。在本例中,测试girlarry是否为数组,是则在原数组前端添加及数组的末尾项添加数据项Dog.。每一次添加数据项都会改变原有的数组。
三 以原数组作为模板,创建新数组:concat()方法与slice()方法
如图C concat()方法与slice()方法
如图C,通过concat()方法与slice()方法创建新数组的过程中,concat()方法与slice()方法都会返回一个新数组,而原有的数组保持不变,不会受到新数组的影响,可以进行独立操作。但是,此两种方法还是有很大的区别的。concat()方法是在原有数组的所有项的基础上进行操作的。例如本例中,girlarray_c数组,就是在原来的数组girlarray上进行添加的,添加的可以是具体的数据项,也可以是数组,但是,不管是哪一个,都是从原数组的末尾项开始添加的。slice()方法,其实其实就是一个能够任意截取数组的方法。该方法可以接受一个或两个参数。一个参数时为起始项到末尾项截取;两个参数时,就是该两个位置数据项的截取,遵循的原则是含头不含尾。var girlarray_d=girlarray.slice(2);从位置2开始截取,直到末尾项并返回新数组;var girlarray_e=girlarray.slice(1,2),从位置1开始截取,直到位置2项并返回新数组,此时并不包含位置2的数据项。
四 数组排序问题
如图C 数组多样排序
如图C,利用reverse()方法和sort()方法对数组进行排序。排序也是数组操作中重要的一个内容,在实际项目中应用广泛。reverse()方法比较简单,就是对数组进行反序排列,功能单一。而sort()方法功能相对丰富,默认为升序排列。在排序过程中,实质是对数据项的字符串形式进行比较。所以,会出现意想不到的结果。在本例中,queckarray数组并不是预期的结果,而是返回:10,5,6,7,8,9。10被当作最小的数字排在了前面。
五 引入比较函数
如图E 比较函数引入
为解决上面10被当作最小数的问题,可以引入比较函数。当a小于b时,返回负1;当a大于b时,返回1;当a等于b时,返回0。这就是一个简单额比较函数。将这个函数作为参数传到sort()方法中,当再次执行相应的代码时,就可以返回预期的正确排序结果
数组的操作,是编程的一项重要的内容,要能熟练的实现实际项目需求,就要深入理解数组的特性。知其然,还需知其所以然。