数组与类数组
Updated:
数组与类数组
数组–Js中不可获取的基础类,从JS诞生开始就存在于JS中的
从最基础的增删改查,到后续的高级语法,一一做整理
先来观察下Array实例的形态
如上,一个数组,包含数组本身的内容和一个不可枚举的length属性。
一 创建数组
- var arr = new Array();
新建一个数组,数组的长度为0,且没有内容
- var a = new Array(5);
新建一个数组,数组的长度为5,但不是上限
- var a = new Array(“b”, 2, “a”, 4); 与 var a = new Array([“b”, 2, “a”, 4,]);
- var a = [“b”, 2, “a”, 4,];
我们做几个比较
new Array(5) 与 new Array([5]) 的区别
表示创建一个length为5的数组和创建一个长度为1的数组,数组第一个元素的内容是[5]
那么如何创建一个只有一个元素的数组,且第一个元素是5呢
或者
另外还有
该代码表示创建一个[[“b”, 2, “a”, 4,]]的数组
Array型的proto比较多,主要有如下
- push 数组尾部推入,返回数组的长度
- shift 数组首部取出 ,返回取出的值
- unshift 数组首部推入 ,返回数组的长度
- pop 数组尾部取出 ,返回取出的值
- indexOf 返回元素在数组中的位置,如果不存在则返回-1
- sort 数组进行排序,可以传入一个函数,函数带两个参数,作为比较的标准
- join 把数组串联成字符串
- toString 数组转换转换成字符串
- concat 数组合并
- reverse 倒序123456var a =[1,2,3];var b = [2];var c=[2,[2,3],1];var n = a.concat(b,c);console.log(n);// [1, 2, 3, 2, 2, [2,3], 1]
还有一些es5新出的一些数组操作,我们一次做es3的兼容
forEach
12345678if(!Array.prototype.forEach){Array.prototype.forEach=function(fn){var arr = this;for(var i = 0,len = arr.length;i<len;i++){fn(arr[i],i);}}}every
1234567891011if(!Array.prototype.every){Array.prototype.every=function(fn){var arr = this;for(var i = 0,len = arr.length;i<len;i++){if(!fn(arr[i],i)){return false;}}return true;}}some 就是every反一下,只需一个满足条件就 return true
1234567891011if(!Array.prototype.some){Array.prototype.some=function(fn){var arr = this;for(var i = 0,len = arr.length;i<len;i++){if(fn(arr[i],i)){return true;}}return false;}}filter
123456789101112if(!Array.prototype.filter){Array.prototype.filter=function(fn){var arr = this, filterArr = [];for(var i = 0,len = arr.length;i<len;i++){if(fn(arr[i],i)){filterArr.push(arr[i]);}}return filterArr;}}map
12345678910if(!Array.prototype.map){Array.prototype.map=function(fn){var arr = this, mapArr = [];for(var i = 0,len = arr.length;i<len;i++){mapArr.push(fn(arr[i],i));}return filterArr;}}reduce
|
|
reduceRight
1234567891011if(!Array.prototype.reduceRight){Array.prototype.reduceRight=function(fn,initialValue){var arr = this, result = null;result = initialValue?fn(initialValue,arr[arr.length-1]):arr[arr.length-1];for(var i = arr.length-1;i--;){result = fn(result,arr[i],i,arr);}return result;}}splice
123456789101112131415161718192021222324252627282930313233if(!Array.prototype.splice){Array.prototype.splice=function(){var arr = this,spliceArr=[],cacheArr=[],addLen = arguments.length-2;if(arguments[0]+arguments[1]>arr.length){arguments[1] = arr.length- arguments[0];}for (var i = 0; i < arr.length; i++) {cacheArr[i] = arr[i];};function max(a1,a2){return (a1>a2?a1:a2);}for(var i = arguments[0],len = max(arr.length,arr.length-arguments[1]+addLen);i<len;i++){if(i<arguments[0]+arguments[1]){spliceArr.push(arr[i]);}if(i<arguments[0]+addLen){arr[i] = arguments[i-arguments[0]+2];}else{var number = i-addLen+arguments[1];arr[i]=cacheArr[number]}if(i>=len-arguments[1]+addLen){delete arr[i];}}return spliceArr;}}
写的略蛋疼,这个splice文章有点多
还有一种用concat相连的比较简单