六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 133|回复: 0

javascript数组

[复制链接]

升级  40.67%

31

主题

31

主题

31

主题

秀才

Rank: 2

积分
111
 楼主| 发表于 2013-1-29 08:44:42 | 显示全部楼层 |阅读模式
Array的一些方法:
//ECMA-262 3rd. Edition function Array(){};Array.prototype = new Object();Array.prototype.length = 1;Array.prototype.concat = function(args){return [];};Array.prototype.join = function(seperator){return [];};Array.prototype.pop = function(){return new Object();};Array.prototype.push = function(args){};Array.prototype.reverse = function(){return [];};Array.prototype.shift = function(){return new Object();};Array.prototype.slice = function(start, end){return [];};Array.prototype.sort = function(funct){return [];};Array.prototype.splice = function(start, deletecount, items){return [];};Array.prototype.unshift = function(start){return [];};一切从声明一个数组开始:
var arr1 = new Array();var arr2 = new Array(4);//长度为4的数组var arr3 = new Array("nico", "a", 4);var arr4 = [ "nico", "a", 4.5, true ]; 
Array与String
1、toString()和valueOf()用逗号将数组连接在一起
arr4.toString()    //nico,a,4.5,true 
2、join接受一个参数,将数组用其拼接成字符串
console.log(arr4.join(","));  //nico,a,4.5,trueconsole.log(arr4.join("-"));  //nico-a-4.5-true 
3、split()则是将字符串分割成一个数组
var arr = "nico,a,4.5,true".split(",");console.log(arr.constructor == Array);console.log("red".split("")); Array新增
1、数组新增有几个方法,当然最直接的是在数组下标赋值:
var arr = [ "nico", "a", 4.5, true ];arr[arr.length] = "b";arr[arr.length] = "c";console.log(arr.toString()); //nico,a,4.5,true,b,c 
2、push是向array末尾新增元素,接受一个数组或普通对象
var arr = [ "nico", "a", 4.5, true ];arr.push("b");console.log(arr.toString()); //nico,a,4.5,true,barr.push([1,2,"b"]);console.log(arr.toString()); //nico,a,4.5,true,1,2,b 
3、concat也可以接受数组或普通对象,但是不会修改原有的数组,需要返回一个新的数组
var arr = [ "nico", "a", 4.5, true ];arr.concat("a");console.log(arr.toString()); //nico,a,4.5,truevar arr1 = arr.concat(["a", 2]);console.log(arr1.toString()); //nico,a,4.5,true,a,2 Array删除
1、pop是对数组最后一个元素
var arr = [ "nico", "a", 4.5, true ];arr.pop();console.log(arr.toString()); //nico,a,4.5与之对应的是shift,他返回数组的第一个元素,并修改原数组
var arr = [ "nico", "a", 4.5, true ];arr.shift();console.log(arr.toString());//a,4.5,true注意unshift则是向向数组的开头添加一个或更多元素,并返回新的长度。
 
2、当然也可以使用delete。delete是javascript里面的一元运算符,主要删除对象的属性或方法的引用。但是会有一个问题,就是数组长度不会改变,只是将该数组位置的元素引用删除,置为undefined
var arr = [ "nico", "a", 4.5, true ];delete arr[0];console.log(arr[0]);//undefinedconsole.log(arr.toString());//,a,4.5,true 
3、这样在实际的使用中肯定是不太符合一般的习惯,我们通过下标删除数组元素,当然期望长度也发生改变,这里是网上找到的一个根据下标删除的例子:
/** * 根据下标删除数组:  * 正数下标从左往右,以0开始  * 负数下标从右往左,以-1开始,超过长度的下标默认删除第一个元素 */Array.prototype.remove = function(index) {if (isNaN(index) || index > this.length) {return false;}return this.splice(index, 1);};测试代码:
var arr = [ "nico", "a", 4.5, true ];arr.remove(0);console.log(arr.toString());// nico,4.5,truearr.remove(-4);console.log(arr.toString());// a,4.5,truearr.remove(-6);console.log(arr.toString());// a,4.5,true 
4、这里用到splice()方法,用来删除、插入、替换数组的元素
/** * function splice(start, deletecount, items) * @param {Number} start  开始删除的下标 * @param {Number} deletecount  删除的个数 * @param {Array} items 用这些数组来替换被删除的元素 * @returns {Array} * @memberOf   Array * @see     Array * @since   Standard ECMA-262 3rd. Edition  * @since   Level 2 Document Object Model Core Definition.  */  Array.prototype.splice = function(start, deletecount, items){return [];};如下:
var arr = [ "nico", "a", 4.5, true ];arr.splice(0, 1, "z");console.log(arr.toString());// z,a,4.5,truearr.splice(1, 1, [ 1, 2 ]);console.log(arr.toString());// nico,1,2,4.5,true用这个特性,我们可以实现在数组制定位置插入一条或多条数据:
Array.prototype.insert = function(index, obj) {return this.splice(index, 0, obj);};var arr = [ "nico", "a", 4.5, true ];arr.insert(1, ["1","2"]);console.log(arr.toString());//nico,1,2,a,4.5,true 
5、同样,这里有一个截取数组的函数slice(startNum, endNum)他接受两个起止位置的下标,不修改原数组,返回一个数组。当然,下标也可以是负数,表示从后开始
var arr = [ "nico", "a", 4.5, true ];arr.slice(1, 2);console.log(arr.toString());// nico,a,4.5,truevar arr1 = arr.slice(1, 6);console.log(arr1.toString());// a,4.5,true 
6、继续说删除,当然也可以提供根据值来删除:
Array.prototype.remove = function(obj) {for ( var i = 0, j = this.length; i < j; i++) {if (this === obj) {this.splice(i, 1);}}};var arr = [ "nico", "a", 4.5, true ];arr.remove("a");console.log(arr.toString());// nico,4.5,true 
几个函数
1、sort用于对数组的元素进行排序,接受一个可选的函数作为排序的规则。而默认是按照数组内元素的字符编码顺序排序。
var arr = [ "nico", "a", 4.5, true ];arr.sort();console.log(arr.toString());// 4.5,a,nico,truevar arr = [ 1, 2.3, -3, 34 ];arr.sort(function(a, b) {return a - b;});console.log(arr.toString());// -3,1,2.3,34 
2、取最大值与最小值
//John Resig是把它们做成Math对象的静态方法Array.prototype.max = function() {return Math.max.apply({}, this);};Array.prototype.min = function() {return Math.min.apply({}, this);};var arr = [ 1, 2.3, -3, 34 ];console.log(arr.max());// 34console.log(arr.min());// -3 
3、contains
Array.prototype.contains = function(obj) {for ( var i = 0, j = this.length; i < j; i++) {if (this === obj) {return true;}}return false;};var arr = [ "nico", "a", 4.5, true ];console.log(arr.contains("a"));// trueconsole.log(arr.contains(2));// false  
 
 
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表