数组的常用方法(ES3.0 ES5.0)

一、以下方法会改变原数组

1.push 在数组的末尾追加
	var arr = [1,2,3];
	arr.push(4);
	console.log(arr);

	//仿写myPush,因为不知道数组的长度,所以通过数组的实参列表,可以实时监听数组长度
	Array.prototype.myPush = function(){
		for(var i = 0; i < arguments.length; i ++){
			this[this.length] = arguments[i];
		}
		return this.length;
	}
复制代码
2.pop() 从数组末尾剪切一位 不用传参
	var arr = [1,2,3];
	var pop = arr.pop();
	console.log(pop);//3
复制代码
3.unshift() 在数组开头增加
	var arr = [1,2,3,4];
	arr.unshift(5,6,7);
	console.log(arr);// [5, 6, 7, 1, 2, 3, 4]
复制代码
4.shift() 在数组开头删减
	var arr = [1,2,3,4];
	var res = arr.shift();
	console.log(res);//1
	console.log(arr);//[2, 3, 4]
复制代码
5.resverse() 把数组元素逆反,返回元素组
	var arr = [1,2,3,4];
	arr.reverse();
	console.log(arr);//[4, 3, 2, 1]
复制代码
6.splice() 截取 ,返回截取数据
	//参数:从第几位开始,截取多少长度,在切口处添加新的数据
	var arr = [1,2,3,4];
	arr.splice(0,2);
	arr.splice(2,0,3,3,3);
	arr.splice(-1,1);//-1代表截取最后一位 
	console.log(arr);//[3, 4, 3, 3]
复制代码
7.sort();//按升序排序 按照ASCII码

参数:必须写两个形参,规则看返回值

当返回值为负数是,前面的数放前面

当返回值为正数时,后面的数在前

当返回值为0时,不动

采用冒泡排序的方式

var arr = [1,2,3,6,10,20,30,33];
	arr.sort();
	console.log(arr);
	arr.sort(function(a,b){
		// if(a > b){
		// 	return 1;
		// }else{
		// 	return -1;
		// }
		//由上可得
		// if(a - b > 0){
		// 	return a - b;//返回正数
		// }else{
		// 	return a - b;//返回负数
		// }
		//----最终
		return a - b;//不管正负,表示升序的方式
		//同理
		//return b - a;//不管正负,表示降序的方式
	})
复制代码
	arr.sort(function(a, b){
		return a - b;
	})
	console.log(arr);
复制代码
	arr.sort(function(a,b){
		return b - a;
	})
	console.log(arr);
复制代码

给一个有序的数组 ,乱序

		var arr = [1,2,3,4,5,6,7,8,9];
		arr.sort(function(){
			return Math.random() - 0.5; // - 0.5这样让概率均衡
		})
		console.log(arr);
复制代码

sort应用

1.按照年龄升序。
		var wang = {
			name:'jc',
			age:20,
			sex:'male',
			face:'hd'
		}
		var li = {
			name:'ld',
			age:10,
			sex:'male',
			face:'am'
		}
		var zhang = {
			name:'zh',
			age:'28',
			sex:'female',
			face:'bt'
		}
		var arr = [wang, li, zhang];
		
		arr.sort(function(a, b){
			return a.age - b.age;
		})
		console.log(arr);
复制代码
2.按字符串长度升序
		var arr = ['undefined', 'zhang', 'lm', 123];
		arr.sort(function(a, b){
			return a.length - b.length;
		})
		console.log(arr);//["lm", "zhang", undefined, 123]
复制代码
3.按字节长度升序
		//先写一个方法算字节长度
		function resbytes(str){
			var len = str.length;
			for(var i = 0; i < str.length; i ++){
				if(str[i].charCodeAt(i) > 255){
					len ++;
				}
			}
			return len;
		}
		var arr = ['undefined','0bacd','a单','0928柯南','前端工程师','想不到要写什么了'];
		arr.sort(function(a, b){
			return resbytes(a) - resbytes(b);
		})
		console.log(arr);
        // ["a单", "0bacd", "0928柯南", "前端工程师", undefined, "想不到要写什么了"]
复制代码

二、以下方法不会改变原数组

1.concat() 连接两个数组。不会改变原数组
	var arr = [1,2,3,4,5];
	var arr1 = ['a', 'b', 'c'];
	var arr2 = arr.concat(arr1);
	console.log(arr2); //[1, 2, 3, 4, 5, "a", "b", "c"]
复制代码
2.toString() 将数组转为字符串
	var arr = [1,2,3,4,'a','b'];
	var newArr = arr.toString();
	console.log(newArr);//1,2,3,4,a,b
复制代码
3.slice(start, end)

参数 从该位开始,到该位结束;

只有一个参数 表示从该位开始截取到最后

不加参数 表示对整个数组长度全部截取

可以填负数 ,表示倒数第几位

	var arr = [1,2,3,4,5,'a','b','c'];
	var newArr = arr.slice(2,5);
	console.log(newArr);//[3, 4, 5]
复制代码
4.join() 将数组按照括号内的符号连接成字符串
	var arr = [1,2,3,4,5];
	var newArr = arr.join('-');
	console.log(newArr);//1-2-3-4-5
复制代码
5.split()//按照符号将字符串转成数组,与join互逆
	var str = '1-2-3-4-5';
	var arr = str.split('-');
	console.log(arr);//["1", "2", "3", "4", "5"]
复制代码
应用 将下列字符串连成一个
	var str1 = 'alibaba',
		str2 = 'tencent',
		str3 = 'toutiao',
		str4 = 'youxi';

	var arr = [str1,str2,str3,str4];
	var strFinal = arr.join("");
	console.log(strFinal);
复制代码

转载于:https://juejin.im/post/5bebe77ce51d450fa35d45da

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值