常用数组方法M

isArray

<script type="text/javascript">
	
		var arr =[1,2,3];
		console.log(typeof arr);
		
	
	
	
		//Array.isArray(obj) 用于确定传递的值是否是一个 Array
		Array.isArray([1, 2, 3]);  // true
		Array.isArray({foo: 123}); // false
		Array.isArray("foobar");   // false
		Array.isArray(undefined);  // false
		
		//obj:需要检测的值。
		
		//返回值:如果对象是 Array,则为true; 否则为false。
		
		//是否影响老数组:不影响
		
		//Polyfill:衬垫代码
		if (!Array.isArray) {
		  Array.isArray = function(arg) {
		    return Object.prototype.toString.call(arg) === '[object Array]';
		  };
		}
	</script>

push() 方法

<script type="text/javascript">
		//push() 方法将一个或多个元素添加到数组的末尾,并返回新数组的长度
		//语法:arr.push(element1, ..., elementN)
		//参数:被添加到数组末尾的元素
		//返回值:当调用该方法时,新的 length 属性值将被返回
		//是否影响老数组:影响
		
		var arr =[1,2,3,4];
		var result = arr.push(5);
		console.log(result,arr);
	</script>

unshift() 方法

<script type="text/javascript">
	//unshift() 方法将一个或多个元素添加到数组的开头,并返回新数组的长度
	//语法:arr.unshift(element1, ..., elementN)
	//参数:要添加到数组开头的元素
	//返回值:当一个对象调用该方法时,返回其 length 属性值 
	//是否影响老数组:影响
	
	var arr =[1,2,3,4];
	var result = arr.shift();
	console.log(result,arr);
	
	
</script>

pop()方法

<script type="text/javascript">
	//pop()方法从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度
	//语法:arr.pop()
	//参数:无
	//返回值:从数组中删除的元素(当数组为空时返回undefined)
	//是否影响老数组:影响
	
	var arr =[1,2,3,"abc"];
	var result = arr.pop();
	console.log(result,arr);
	
	
</script>

shift() 方法

<script type="text/javascript">
	//shift() 方法从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度
	//语法:arr.shift()
	//参数:无
	//返回值:从数组中删除的元素; 如果数组为空则返回undefined 。 
	//是否影响老数组:影响
	
	var arr =["abc",2,3,4];
	var result = arr.shift();
	console.log(result,arr);
	
	
</script>

concat() 方法

<script type="text/javascript">
	//concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。
	//语法:arr.concat(arr1[, arr2[, ...[, arrN]]])
	//参数:valueN-->待链接的数组
	//返回值:新的 Array 实例
	//是否影响老数组:不影响
	
	var arr =[1,2,1,4];
	var arr1=[5];
	var arr2=[6];
	var result = arr.concat(arr1,arr2);
	console.log(result,arr,arr1,arr2);
	
	
</script>

indexOf()方法

<script type="text/javascript">
	//indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。
	//语法:arr.indexOf(searchElement)
	//参数:searchElement-->要查找的元素
	//返回值:首个被找到的元素在数组中的索引位置; 若没有找到则返回 -1
	//是否影响老数组:不影响
	
	var arr =[1,2,1,4];
	var result = arr.indexOf(1);
	console.log(result,arr);
	
	
</script>

lastIndexOf() 方法

<script type="text/javascript">
	//lastIndexOf() 方法返回指定元素在数组中的最后一个的索引,如果不存在则返回 -1
	//语法:arr.lastIndexOf(searchElement)
	//参数:searchElement-->要查找的元素
	//返回值:数组中最后一个元素的索引,如未找到返回-1
	//是否影响老数组:不影响
	
	var arr =[1,2,1,4];
	var result = arr.lastIndexOf(1);
	console.log(result,arr);
	
	
</script>

join() 方法

<script type="text/javascript">
		//join() 方法将一个数组的所有元素连接成一个字符串并返回这个字符串
		//语法:arr.join(separator)
		//参数:separator ---> 指定一个字符串来分隔数组的每个元素。如果省略(),数组元素用逗号分隔。默认为 ","。
		//返回值:一个所有数组元素连接的字符串。如果 arr.length 为0,则返回空字符串
		//是否影响老数组:不影响
		
		var arr =[1,2,1,4];
		var result = arr.join("&");
		console.log(result,arr);
		
		
	</script>

toString()

<script type="text/javascript">
	//toString() 返回一个字符串,表示指定的数组及其元素。
	//语法:arr.toString()
	//参数:无
	//返回值:返回一个字符串。 
	//是否影响老数组:影响
	
	var arr =[1,2,3,4];
	var result = arr.toString();
	console.log(result,arr);
	
	
</script>

forEach() 方法

<script type="text/javascript">

	var arr =["a","b","c"];
	arr.forEach(function(item,index){
		console.log(item,index,this);
	},{name:"damu"})

    //forEach() 方法对数组的每个元素执行一次提供的函数。
	//参数1:callback
			/*
			为数组中每个元素执行的函数,该函数接收三个参数:
			currentValue(当前值):数组中正在处理的当前元素。
			index(索引):数组中正在处理的当前元素的索引。
			array:forEach()方法正在操作的数组。
			*/
	//参数2:thisArg
		/*可选参数。当执行回调 函数时用作this的值。*/
	
	//返回值:undefined
	
	//是否影响老数组:由callback决定
</script>

every() 方法

<script type="text/javascript">
	//every() 方法测试数组的所有元素是否都通过了指定函数的测试
	var arr =[1,2,3,4,5,6,7,8];
	var result = arr.every(function(item,index){
		if(item<9){
			return true;
		}
	})
	console.log(result);
	
	//参数1:callback
		/*为数组中每个元素执行的函数,该函数接收三个参数:
			currentValue(当前值):数组中正在处理的当前元素。
			index(索引):数组中正在处理的当前元素的索引。
			array:forEach()方法正在操作的数组。*/
	//参数2:thisArg
		/*可选参数。当执行回调 函数时用作this的值。*/
	
	//返回值:true false
	
	//是否影响老数组:不影响
	
	
</script>

some() 方法

<script type="text/javascript">
		//some() 方法测试数组中的某些元素是否通过由提供的函数实现的测试。
		var arr =[1,2,3,4,5,6,7,8];
		var result = arr.some(function(item,index){
			if(item > 7){
				return true;
			}
		})
		
		console.log(result);
		
		//参数1:callback
			/*为数组中每个元素执行的函数,该函数接收三个参数:
				currentValue(当前值):数组中正在处理的当前元素。
				index(索引):数组中正在处理的当前元素的索引。
				array:forEach()方法正在操作的数组。*/
		//参数2:thisArg
			/*可选参数。当执行回调 函数时用作this的值。*/
		
		//返回值:true false
		
		//是否影响老数组:不影响
		
		//Polyfill:衬垫代码
		if (!Array.prototype.some){
		  Array.prototype.some = function(fun /*, thisArg */)
		  {
		    'use strict';
		
		    if (this === void 0 || this === null)
		      throw new TypeError();
		
		    var t = Object(this);
		    var len = t.length >>> 0;
		    if (typeof fun !== 'function')
		      throw new TypeError();
		
		    var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
		    for (var i = 0; i < len; i++)
		    {
		      if (i in t && fun.call(thisArg, t[i], i, t))
		        return true;
		    }
		
		    return false;
		  };
		}
	</script>

filter() 方法

<script type="text/javascript">
		//filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。 
		var arr =[1,2,3,4,5,6,7,8];
		var result = arr.filter(function(item,index){
			if(item > 7){
				return true;
			}
		})
		console.log(result);
		
		//参数1:callback
			/*为数组中每个元素执行的函数,该函数接收三个参数:
				currentValue(当前值):数组中正在处理的当前元素。
				index(索引):数组中正在处理的当前元素的索引。
				array:forEach()方法正在操作的数组。*/
		//参数2:thisArg
			/*可选参数。当执行回调 函数时用作this的值。*/
		
		//返回值:  一个新的通过测试的元素的集合的数组
		
		//是否影响老数组:不影响
		
		//Polyfill:衬垫代码
		if (!Array.prototype.filter){
		  Array.prototype.filter = function(fun /* , thisArg*/)
		  {
		    "use strict";
		
		    if (this === void 0 || this === null)
		      throw new TypeError();
		
		    var t = Object(this);
		    var len = t.length >>> 0;
		    if (typeof fun !== "function")
		      throw new TypeError();
		
		    var res = [];
		    var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
		    for (var i = 0; i < len; i++)
		    {
		      if (i in t)
		      {
		        var val = t[i];
		
		        // NOTE: Technically 03_this should Object.defineProperty at
		        //       the next index, as push can be affected by
		        //       properties on Object.prototype and Array.prototype.
		        //       But that method's new, and collisions should be
		        //       rare, so use the more-compatible alternative.
		        if (fun.call(thisArg, val, i, t))
		          res.push(val);
		      }
		    }
		
		    return res;
		  };
		}
	</script>

sort() 方法

<script type="text/javascript">
	/*sort() 方法使用in-place算法对数组的元素进行排序,并返回数组。
	默认排序顺序是根据字符串Unicode码点。*/
	var arr =[1,266,30,4,26,16,147,28];
	var result = arr.sort(function(a,b){
		//从小到大
		// return a-b;
		//从大到小
		return b-a;
	})
	console.log(result);
	console.log(arr);
	console.log(arr == result)
	
	//参数compareFunction 可选。
		/*
			用来指定按某种顺序进行排列的函数。如果省略,
			元素按照转换为的字符串的各个字符的Unicode位点进行排序。
		*/
	
	//返回值:返回排序后的数组。
	
	//是否影响老数组: 影响 原数组已经被排序后的数组代替。
	
</script>

reverse 方法

<script type="text/javascript">
	//reverse 方法颠倒数组中元素的位置,并返回该数组的引用
	//语法: arr.reverse()
	//参数:无
	//返回值:该数组的引用。 
	//是否影响老数组:影响
	
	var arr =[1,2,3,4];
	var result = arr.reverse();
	console.log(result,arr);
	console.log(arr == result )
	
	
</script>

map() 方法

<script type="text/javascript">
	//map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
	var numbers = [1, 4, 9];
	var roots = numbers.map(Math.sqrt);
	
	
	//格式化数组中的对象
	// reformattedArray 数组为: [{1: 10}, {2: 20}, {3: 30}],
	var kvArray = [{key: 1, value: 10}, {key: 2, value: 20}, {key: 3, value: 30}];
	var reformattedArray = kvArray.map(function(obj) { 
	   var rObj = {};
	   rObj[obj.key] = obj.value;
	   return rObj;
	});
	console.log(reformattedArray)
	
	
	
	//参数1:callback
		/*为数组中每个元素执行的函数,该函数接收三个参数:
			currentValue(当前值):数组中正在处理的当前元素。
			index(索引):数组中正在处理的当前元素的索引。
			array:forEach()方法正在操作的数组。*/
	//参数2:thisArg
		/*可选参数。当执行回调 函数时用作this的值。*/
	
	//返回值:一个新数组,每个元素都是回调函数的结果。
	
	//是否影响老数组:不影响

</script>

slice() 方法

<script type="text/javascript">
	//slice() 方法返回一个从开始到结束(不包括结束,左闭右开)选择的数组的一部分浅拷贝到一个新数组对象
	var arr =[1,25,34,14,26,16,47,28];
	arr.slice(2, 6);
	//参数
		/*
			begin 可选
			end   
			slice(begin,end):[begin,end)
		*/
		
	//返回值:一个含有提取元素的新数组
	
	//是否影响老数组:不影响
	
	
	
</script>

splice() 方法

<script type="text/javascript">
	//splice() 方法通过删除现有元素和/或添加新元素来更改一个数组的内容
	var arr =[1,25,34,14,26,16,47,28];
	//arr.splice(0)//全删
	//arr.splice(0,2)
	
	arr.splice(0,2,1,2,3)
	console.log(arr);
	//参数
		/*
			start			从start开始删
			deleteCount 	删几个
			item列表			删完之后在相同位置处加哪几个
		*/
		
	
	//返回值:由被删除的元素组成的一个数组
	
	//是否影响老数组:影响
	
	
</script>

reduce() 方法

<script type="text/javascript">
	//reduce() 方法对累加器和数组中的每个元素(从左到右)应用一个函数,将其减少为单个值。
	//数组里所有值的和
	var arr =[2, 1, 2, 3];
	var sum = arr.reduce(function (a, b) {
	  return a + b;
	},0);
	console.log(sum);
	console.log(arr);
	
	//参数1:callback
		/*
		 为数组中每个元素执行的函数,该函数接收三个参数:
			accumulator(当前值):累加器累加回调的返回值; 它是上一次调用回调时返回的累积值
			currentValue:数组中正在处理的元素。
			currentIndex可选:数组中正在处理的当前元素的索引。 如果提供了initialValue,则索引号为0,否则为索引为1。
			array可选:调用reduce的数组。
		*/
	//参数2:initialValue
		/*
		    用作第一个调用 callback的第一个参数的值。 如果没有提供初始值,则将使用数组中的第一个元素。
		    在没有初始值的空数组上调用 reduce 将报错。
		*/
	
	//返回值:  一个新的通过测试的元素的集合的数组
	
	//是否影响老数组:不影响
	
	//Polyfill:衬垫代码
	if (!Array.prototype.reduce) {
	  Object.defineProperty(Array.prototype, 'reduce', {
	    value: function(callback /*, initialValue*/) {
	      if (this === null) {
	        throw new TypeError( 'Array.prototype.reduce ' + 
	          'called on null or undefined' );
	      }
	      if (typeof callback !== 'function') {
	        throw new TypeError( callback +
	          ' is not a function');
	      }
	      var o = Object(this);
	      var len = o.length >>> 0; 
	      var k = 0; 
	      var value;
	      if (arguments.length >= 2) {
	        value = arguments[1];
	      } else {
	        while (k < len && !(k in o)) {
	          k++; 
	        }
	        if (k >= len) {
	          throw new TypeError( 'Reduce of empty array ' +
	            'with no initial value' );
	        }
	        value = o[k++];
	      }
	      while (k < len) {
	        if (k in o) {
	          value = callback(value, o[k], k, o);
	        }
	        k++;
	      }
	      return value;
	    }
	  });
	}
</script>

数组去重

<script type="text/javascript">
	//sort + map
	var arr = [1,2,1,2,3,5,4,5,3,4,4,4,4];
	function qucong(arr){
		var result = [];
		arr.sort().map(function(item){
			if(result.length===0 || result[result.length-1]!==item ){
				result.push(item);
			}
		})
		return result;
	}
	console.log(qucong(arr));
	

	//sort + reduce
	var arr = ["展示","展示",2,1,2,3,5,4,5,3,4,4,4,4];
	var result = arr.sort().reduce(function(init, current){
	    if(init.length===0 || init[init.length-1]!==current){
	        init.push(current);
	    }
	    return init;
	}, []);
	console.log(result); //[1,2,3,4,5]
	
</script>

稀疏数组

<script type="text/javascript">
		var a = new Array( 3 );
		var b = [ undefined, undefined, undefined ];
		var c = [];
		c.length = 3;
		
		console.log(a.join( "-" )); // "--"
		console.log(b.join( "-" )); // "--"
		console.log(c.join( "-" )); // "--"
		a.map(function(v,i){ console.log(v,i)});//无输出 
		b.map(function(v,i){ console.log(v,i)});//有输出
		c.map(function(v,i){ console.log(v,i)});//无输出
	</script>

伪数组(类数组)

<body>
	<div>1</div>
	<div>2</div>
	<div>3</div>
	<div>4</div>
</body>
<script type="text/javascript">
	var arr ={};
	arr.length=3;
	arr[0]=0;
	arr[1]=1;
	arr[2]=2;
	
	
	var arr2 = Array.prototype.slice.call( arr );
	arr2.push(3)
	console.log(arr2);
</script>

arguments

<script type="text/javascript">
	/*
	 * 在调用函数时,浏览器每次都会传递进两个隐含的参数:
	 * 	1.函数的上下文对象 03_this
	 * 	2.封装实参的对象 arguments
	 * 		- arguments是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度
	 * 		- 在调用函数时,我们所传递的实参都会在arguments中保存
	 * 		- arguments.length可以用来获取实参的长度
	 * 		- 我们即使不定义形参,也可以通过arguments来使用实参,
	 * 			只不过比较麻烦
	 * 			arguments[0] 表示第一个实参
	 * 			arguments[1] 表示第二个实参 。。。
	 *		- 它里边有一个属性叫做callee,
	 * 			这个属性对应一个函数对象,就是当前正在指向的函数的对象
	 * 		
	 */
	
	function fun(a,b){
		//console.log(arguments instanceof Array);
		//console.log(Array.isArray(arguments));
		//console.log(arguments[1]);
		//console.log(arguments.length);
		console.log(arguments.callee == fun);
	}
	
	fun("hello",true);
	
</script>
<script type="text/javascript">
		function factorial(num){
			if (num <=1) {
				return 1;
			} else {
				return num * factorial(num-1)
			}
		}
		
		function factorial(num){
			if (num <=1) {
				return 1;
			} else {
				return num * arguments.callee(num-1)
			}
		}
	</script>

<script type="text/javascript">
	/*
		从 ES5  规范开始就允许在列表(数组值、属性列表等)末尾多加一个逗号(在实际处理中会被忽略不计)。
		所以如果你在代码或者调试控制台中输入 [ , , , ] ,实际得到的是 [ , , ] (包含三个空单元的数组
	*/
	console.log([ , , , ])
</script>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值