js数组进阶

来源:互联网 发布:淘宝代购利润是多少 编辑:程序博客网 时间:2024/06/05 09:17

定义数组

方法1:

var a = new Array("1","2");a[2] = 1;a[3] = 2;

方法2:

var a = [1,2,3];a[3] = 4;var b = ["1", "2", "3", "4"];
***length属性非只读,当b.length=2时,遍历b时,只显示1,2,后面属性变得不可用;

字符串也可以作为数组的下标:

var stack = new Array();  stack['first'] = 3.1415926;  stack['second'] = "okay then.";for(var item in stack){      alert(typeof stack[item]);      //number    //string    typeof 返回值有六种可能: "number," "string," "boolean," "object," "function," 和 "undefined."}
********
遍历数组:
1.//索引数组且并非"连续分配"内存的,因此索引方法并不会带来很高的效率

for (var i = 0,a; a=arr[i++];){alert(a);}

2.//可遍历对象的属性

for(var i in arr){alert(a);}
********
内置方法:
push():向数组的末尾添加一个或更多元素,并返回新的长度
pop():删除并返回数组的最后一个元素
splice():删除元素,并向数组添加新元素
sort(function(a,b){return a-b//正序})**数字排序时使用,字符排序时,直接arr.sort()
reverse():颠倒数组中元素的顺序
concat(array1 [,..arrayn]):用于将N个数组合并到array1数组中
slice(start, [end]):返回一个 Array 对象
delete只能删除元素对象,undefined将代替元素对象占据下标,因此,length不会减少
******************增加remove方法
//根据index删除
Array.prototype.remove = function(index){if(isNaN(index)||index>this.length){return false;}for(var i=0,n=0;i<this.length;i++){if(this[i]!=this[index]){this[n++]=this[i];}}this.length-=1;};
******************增加pushIndex方法
//根据index,插入

Array.prototype.pushIndex = function(index,d){var size = this.length;if(isNaN(index)||index>this.length){return false;}for(var j=size;j>=index;j--){this[j] = this[j-1];    }    this[index] = d;    size++;};
---不影响整个原型链

Array.remove = function(array, from, to) {      var rest = array.slice((to || from) + 1 || array.length);      array.length = from < 0 ? array.length + from : from;      return array.push.apply(array, rest);  };
代价是你需要显式的传递需要操作的数组作为第一个参数
var array = ["one", "two", "three", "four", "five", "six"];
Array.remove(array, 0, 2);//删除0, 1, 2三个元素
****这种方式,相当于给JavaScript内置的Array添加了一个静态方法,静态变量同上,不需要"实例化"Array类

**********************************************************************

伪数组:符合以下条件的对象
1,具有length属性
2,按索引方式存储数据
3,不具有数组的push,pop等方法
如:
1,function内的arguments.
2,通过document.forms,Form.elements,Select.options,document.getElementsByName(),document.getElementsByTagName(),childNodes/children 等方式获取的集合(HTMLCollection,NodeList)等.

工具函数makeArray

function makeArray(obj){      var rs=[],len=obj.length;      try{  //slice(start,end)复制一段数组        rs = [].slice.call(obj,0);      }catch(e){//for IE          for(var i=0;j=obj[i++];){              rs.push(j);          }                         }      return rs;    } 

判断数组类型

//typeof是一个一元的操作符1.alert(typeof []);//object //对数组无效2.var arr=[]; alert(arr instanceof Array);//true3.alert(arr.constructor == Array); // true


0 0
原创粉丝点击