简析数组方法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44885062/article/details/94401508

ES5数组方法

1、ES

  • push()接受多个参数,并将这些参数放置于数组尾部,返回新数组的长度,原始数组发生改变。

  • pop()不接收参数,从数组尾部删除一个元素,并返回这个删除的元素,原数组发生改变。

  • unshift()接受多个参数并,将这些参数放置于数组头部,返回新数组的长度,原数组发生改变。

  • shift()不接受参数,从数组的头部删除一个元素,并返回这个删除的元素,原数组发生改变。

  • slice()如果是一个参数,那么该参数表示的索引开始截取,直至数组结束,返回截取的数组,原数组不发生改变。
    如果有两个参数,从第一个参数表示的索引开始截取,到第二个参数表示的索引结束,不包括第二个参数对应的索引位上的元素。

  • splice() 如果一个参数,那么从该参数表示的索引开始截取,直至数组结束,返回截取的数组,原数组发生改变。
    如果有两个参数,从第一个参数表示索引,第二个参数表示的是截取的长度。
    如果有三个及以上参数,从第一个参数表示索引,第二个参数表示的是截取的长度,后边的会从截取的位置添加至原数组里。

  • reverse()数组翻转参数无意义。

  • sort()排序(按照字符串按位比较的方式来判断大小)

			var arr = [2,11,50,7,9];
			
			console.log(arr.sort());//按照字符串按位比较方式来判断大小的
			
			arr.sort(function(a,b){
				return a - b;//从小到大
				return b-a;//从大到小
			})
			console.log(arr);
  • join()将数组中元素以参数来进行拼接
			var arr = [1,2,3,4];//"1234"
			var str = arr.join("-----");
			console.log(str,arr)
  • concat()合并数组,将参数放到原数组里,如果参数是一个数组,把数组中的元素提出来,放到原数组中。
  • for遍历数组;(不用for in遍历:我们无法保证我们引入的js是否会采用prototype扩展原生的Array)
//for遍历数组
				var arr = ["a","b","c","d"];
				for(var i = 0; i < arr.length; i++){
					console.log(arr[i]);
			}

2、ES5新增数组方法;

  • indexOf() 找出数组中是否有给定值的元素,并返回找到的第一个元素的索引值;如果没有则返回-1。
  • forEach() 如果不接受参数,遍历数组中每一个元素。
    如果接受参数,分别为:item, index, array, (用不到时可以不写);item 表示每次迭代的元素;index 表示每次迭代元素的下标;array 表示原数组
var arr = [20,13,11,8,0,11];
var min = arr[0]; //假设数组的第一个元素的为最小值

arr.forEach(function(item,index,array){

	//输出数组的每个元素及其对应的下标
	console.log(index,item); 
	
	//输出数组中值为奇数的元素
	if(item%2){ 
		console.log(item); 
	}
	
	//练习三:求数组的最小值
	if(item<min){
		min = item;
	}
})
alert(min);

  • map()返回一个新数组,新数组是原数组的映射;不改变原数组的值;新数组的元素值是每次函数return的返回值;若不写return,接收的新数组的元素值将全为空;
var arr = [20,13,11,8,0,11];
var brr = arr.map(function(item)){

	//将数组的每个元素都将增加到原来的1.2倍
	return item*1.2;
	// 此时brr为a数组每个元素的1.2倍

	//若return 1,则新数组的每个元素值均为1
	return 1;
}

  • filter()过滤元素,返回一个新数组;新的数组由每次函数返回值为true对应的元素组成;原数组不受影响;
var arr = [20,13,11,8,0,11];
var brr =arr.filter(function(item)){
	//返回值为奇数的元素
	return item%2;
}

  • some() return返回的值只要有一项为true,最终的返回值就为true,不会继续遍历后边的元素;
    若没有一项满足返回值为true的,就返回false;原数组不受影响;
var arr = [20,13,11,8,0,11];
var brr = arr.some(function(item){
	return item>10;
})
alert(brr); //true

  • every() 对数组的每一项执行给定的函数,假如该函数每一项都返回true,最后结果才为true;
    只要有一项返回值为false,最后结果就是false。且后边的元素都不会再继续执行函数;
    原数组不受影响;
var arr = [20,13,11,8,0,11];
var brr = arr.every(function(item){
	return item>10;
})
alert(brr); //false

  • reduce() 返回值是最后一次函数调用的返回值;
    不写return时,默认返回undefined;
    运行机制:一开始,prev代表数组第一个元素,next指向数组第二个元素 ;函数有个返回值,会作为下次的prev值;当给方法第二个参数值时,prev从传的第二个参数值开始,next从第一个元素值开始
var arr = [1,4,5,7,8,10];
var res = arr.reduce(function(prev,next){
	console.log(prev+"---"+next);
	return 4;
})
console.log(res);

/*
分析:
一开始,prev代表数组第一个元素,next指向数组第二个元素  1---4
函数有个返回值,会作为下次的prev值
4---5
4---7
4---8
4---10
*/



//reduce()还可以有第二个参数

var arr = [1,4,5,7,8,10];
var res = arr.reduce(function(prev,next){
	console.log(prev+"---"+next);
	return prev+next;
},100)  //prev从传的第二个参数值100开始,next从第一个元素值开始
console.log(res);

猜你喜欢

转载自blog.csdn.net/weixin_44885062/article/details/94401508