今天讲js的数组。数组是js中最基础的数据结构了。
主要讲讲数组实现栈,队列以及其他的基本操作。栈和队列都可以在数组头尾位置处理,所以,都有两种方式。
属性
1、length : 长度,表示数组元素的个数。
方法
1、实现栈,先进后出。注意,下面两组是配对出现。
入栈:Array.unshift(obj) 在数组第一个元素插入数据
出栈:obj = Array.shift() 取出第一个元素,返回第一个元素后,删除第一个元素
-------------我是华丽的分割线------------------------------
入栈:Array.push(obj) 在数组尾部添加一个元素
出栈:obj.pop() 在数组尾部取出一个元素
2、实现队列,先进先出。
入队:Array.push(obj) 在数组尾部添加一个元素
出队:obj = Array.shift() 取出第一个元素
-------------我是华丽的分割线------------------------------
入队:Array.unshift(obj) 从数组头插入一个元素
出队:obj = Array.pop() 从数组尾部取出一个元素
3、拼接数组,array = Array.concat(array,array,,,)
all = array1.concat(array2,array3,,,,,,),将array2的头拼接在array1的尾部,array3拼接在已拼接的array1,array2的后面,举个栗子。
var parents = ["Jani", "Tove"];
var brothers = ["Stale", "Kai Jim", "Borge"];
var children = ["Cecilie", "Lone"];
var family = parents.concat(brothers, children);
console.log(family) //输出Jani,Tove,Stale,Kai Jim,Borge,Cecilie,Lone
4、将数组转换成字符串。string = Array.join()
join()会返回一个字符串,并且,原先数组里面的元素用','隔开。举个栗子。
var parents = ["Jani", "Tove"];
str = parents.join() // 'Jani,Tove'
所以这样很适合分割和合成。
5、随意复制数组,array = Array.slice(startAt, endAt)
这里有亮点,所以用粗体,同学们细心了。注意区分 不传参数,传入一个参数,传入两个参数,还有出入正负数的区别。
5.1 数组深度复制看栗子
var arr = ['aa','bb','cc']
var arr2 = arr;
arr2.pop();
console.log(arr)//输出['aa','bb']这是因为arr2 和 arr指向同一个地址 arr == arr2; // true //深度复制的话酱紫做或者酱紫 arr3 = arr.alice(0)
arr3 = arr.slice();//这样会重新开辟memory,所以arr3的任何操作对arr都没有影响 arr == arr3; //false
5.2 从第某个元素开始复制后面所有的元素
arr = arr2.slice(2);//arr将arr2[2] -- arr2[arr2.length-1]复制
arr = arr.slice(-2)// arr 将 arr2[arr2.length-1-2] -- arr2[arr2.length-1]复制,,就是倒数的两项
5.3 取数组的某几项,且看栗子
var a = [1,2,3,4,5]; a.slice(0,3); // 返回 [1,2,3] a.slice(3); // 返回 [4,5] a.slice(1,-1); // 返回 [2,3,4] a.slice(-3,-2); // 返回 [3]; IE 4存在的Bug: 返回[1,2,3]
6、随意改变数组 array.splice(startAt, removeCount, obj1,obj2,,,,,,)继续看栗子
var a = [1,2,3,4,5,6,7,8] a.splice(4); // 返回 [5,6,7,8]; a is [1,2,3,4] a.splice(1,2); // 返回 [2,3]; a is [1,4] a.splice(1,1); // Netscape/JavaScript 1.2 返回 4 ,应该返回 [4] a.splice(1,0,2,3); // Netscape/JavaScript 1.2 返回 undefined ,应该返回 []
Bug
方法splice()假定在各种情况下均返回一个包含已删除元素的数组。
但是,在 Netscape的JavaScript 1.2解释器中,如果删除的是单个元素,那么该方法返回的是元素,而不是包含那个元素的数组。
如果没有删除任何元素,它不是返回一个空数组,而是什么都不返回。
只要把语言版本明确地设置为1.2,JavaScript的Netscape实现都有这种bug行为。
每次都晚上写,一下就晚了。原创作品,转载请注明出处:http://zhutty.cnblogs.com
如果你也喜欢与人交流分享,可加群:164858883
如果我的博客对你有帮助,不吝捐赠。