数组

  • 数组

两种构造方法

  1.  Var arr = [];  [1,2,3] 里面写数组的
  2.  var arr = new Array();  new Array(10) 里面是数组长度。只能整数
  3. 溢出读写

var arr = [];

arr[10]; 结果为undefined

arr[10] = 123;  会将数组撑大到11位,[undefined x 10 , 123]

length为11

// 两种构造方法

 var arr = [];  //[1,2,3] 里面写数组的
 var arr = new Array();  //new Array(10) 里面是数组长度。只能整数

// 溢出读写
 var arr = [];

 arr[10]; //结果为undefined

 arr[10] = 123;//会将数组撑大到11位,[undefined x 10 , 123]  length为11

1、数组的方法

1.1 push 在数组最后一位添加 可添加多位 返回数组长度

// 数组的方法
// 1、push  在数组最后一位添加  可添加多位
var arr = [];	
	arr.push(1,2,3);

// 试着自己在数组原型上写一个自己的push方法
Array.prototype.push = function(){
	// 由于可以添加多个,所以不需要形参。只要实参
	for (var i = 0; i < arguments.length; i++) {
		this[this.length] = arguments[i]
	}
	return '我自己的push';
}

1.2 pop 剪切数组最后一位  传参无效 一次只剪切一位

// 2、pop 剪切数组最后一位 不传参 一次只删除一位

var arr = [1,2,3];
	
	arr.pop(); //返回剪切的那个值 3

	// arr原数组变成剪切后的新数组 [1,2]

1.3 unshift 在数组前面一位添加值  多添加多个

var arr = [1,2,3];
	arr.unshift(1,2);//返回最后的数组长度 这里是5

自己试着封装一个unshift函数

 

 

 

 

1.4 shift 剪切数组最前面一位  不传参

var arr = [1,2,3];
	arr.shift();//返回被剪切的那个值1
	// 原本的数组保留剩下的值[2,3]

1.5 reverse 反转数组

var arr = [1,2,3,4,5];
	arr.reverse(); //返回新的排列顺序[5,4,3,2,1]

1.6 splice 截取,添加,替换 
    arr.splice(从第几位开始,截取多少位,在切口处添加新数据)


// 6、splice 截取,添加,替换 
// 	  arr.splice(从第几位开始,截取多少位,在切口处添加新数据)
	var arr = [1,2,3,4,5];
	// 1、从索引1开始,截取2位
	arr.splice(1,2);//返回截取的值[2,3]
	// 原数组保留剩下的[1,4,5];	

	var arr = [1,2,3,4,5];
	// 2、从索引1开始截取2位,插入新值8,8,8
	arr.splice(1,2,8,8,8);//返回截取的[2,3]
	// 原数组保留剩下的[1,8,8,8,4,5]
	
	var arr = [1,2,3,4,5];
	// 3、不想截取,只想在索引3的位置添加值8
	arr.splice(3,0,8);//在哪位加就从哪位开始,截取0

// 注意:如果是负数位开始,就是倒数位 但只截取最后一位。
	// 			当是-1开始时,不管第二个参数是几,都只截取一位。
	var arr = [1,2,3,4,5];
		arr.splice(-1,3);//只截取之后一位[5]
		arr.splice(-2,2);//从倒数第二位往前截取;两位

1.7 sort 将数组按大小排列
     arr.sort();将数组内每一项按编码大小排列。,而不是数字大小
     arr.sort(function(a,b){return a-b});//里面必须传两个参数

// 7、sort 将数组按大小排列
	// arr.sort();将数组内每一项按编码大小排列。,而不是数字大小
	arr.sort(function(a,b){return a-b});//里面盲必须传两个参数

var arr = [1,2,3,12,4,5,'c','a','b'];
arr.sort();//[1,12,2,3,4,5,'a','b','c'];

// 如果需要按数字大小排列的话,需要在括号内加函数
// 函数的逻辑:看函数内的返回值。a-b
// 升序 	1、为正数时,a>b,那么a往后排,b往前
// 			2、为负数时或负数时,a<=b,那么不动
arr.sort(function(a,b){
	if (a>b) {
		return 1;//返回一个正数,a需要往后移。
	}else{
		return -1;//返回一个负数。
	}
})
// 由于a>b时,a-b就是正数。a<b时,a-b就是负数。只要返回他们的减数就行。
// 所以简化如下
arr.sort(function(a,b){
	return a-b;//升序
})

arr.sort(function(a,b){
	return b-a;//降序
})

sort衍生的面试题

// 题:给一个有序的数组,将他随机乱序。
var arr = [1,2,3,4,5,6,7];

	arr.sort(function(){
		return Math.random() - 0.5;
	})
	
// 解析:由于sort(function(){})内是要进行多伦对比,
// 		 每次对比都要返回一个正数或者负数来决定排序。
// 		 可以用Math.random()  0-1之间的随机数来觉得随机的正负数
// 		 Math.random() - 0.5 就是随机的正负数
// 		 这样一来就会随机排序
// 题: 给下面数组,按照数组内对象的年龄大小排序
	var deng = {
		name : 'deng',
		age : 52,
		sex : 'male'
	};
	var zhang = {
		name : 'zhang',
		age : 20,
		sex : 'male'
	};
	var cheng = {
		name : 'cheng',
		age : 34,
		sex : 'male'
	};

	var people = [deng,zhang,cheng];
	people.sort(function(a,b){
		return a.age - b.age;
	})
	// 题:将数组内的值按长度排序
	var arr = ['a','asdd','s','gefedsfsf','sadadsa'];
	// 同理 只需要对length做比较
		 arr.sort(function(a,b){
			return a.length - b.length;
		})
	// 题:将数组内的值按长度排序
	var arr = ['a','asdd','s','gefedsfsf','sadadsa'];
	// 同理 只需要对length做比较
		 arr.sort(function(a,b){
			return a.length - b.length;
		})

	// 题:将数组内的值按字节长度排序
	var arr = ['我是','123','嘿嘿嘿12','123554','你好撒23dd'];

	// 思路:先封装一个求字节长度的函数
	function retBytes(str){
		var num = str.length;
		for (var i = 0; i < str.length; i++) {
			if (str.charCodeAt(i)>255) {
				num++;
			}
		}
		return num;
	}
	// 然后用sort排序
	arr.sort(function(a,b){
		return retBytes(a) - retBytes(b);
	})

下面的方法会改变原数组

1.8 concat 拼接数组

   arr1.concat(arr2);在arr1后面拼接上arr2.返回新数组。原数组不变

// 1、concat 拼接数组  
// arr1.concat(arr2);在arr1后面拼接上arr2.返回新数组。原数组不变
var arr1 = [1,2,3];
var arr2 = [4,5,6];

var newarr = arr1.concat(arr2);//返回拼接后的新数组 [1,2,3,4,5,6]
// arr1跟arr2不变 依旧是[1,2,3]  [4,5,6]

1.9 toString 将数组转为字符串

// 2、toString 将数组转为字符串
var arr = [1,2,3,4,5];
var newarr = arr.toString();//返回字符串"1,2,3,4,5"
// arr原数组不变。依旧[1,2,3,4,5]

1.10 slice 数组截取  一个参数或两个参数 
   arr.slice(开始截取位,截取到该位) 包左不包右 

var arr = [1,2,3,4,5];
		var newarr = arr.slice(2,4);//返回新数组[3,4] 
									//从索引第2位截取到3位,不包第4位。
									// arr原数组不变

		var newarr = arr.slice(2);//只传一个参数时,从该位截取到最后一位

		arr.slice();//不传参时截取整个数组、
		// 当传参为负数时,第二个参数不需要。加上不会截取
		var newarr = arr.slice(-2);//从倒数第2位开始截取到最后一位。也就是截取后2位

1.11 join arr.join('链接符');
  在join中加入需要的链接标识。将数组各项链接起来,组成字符串

var arr = [1,2,3,4,5];
	var newStr = arr.join('~');//返回字符串"1~2~3~4~5"
	arr.join();//不传参时,会自动用逗号连接"1,2,3,4,5"
	arr.join("");//传空字符串时,会紧密连接。"12345"

	// 题:将下列的多个字符串连成一个字符串
	var str1 = 'alibaba',
		str2 = 'baidu',
		str3 = 'tencent',
		str4 = 'toutiao',
		str5 = 'wnagyi';
	// 思路1:将字符串放在数组中,用循环将所有字符串放到新的字符串中
	var newstr = "";
	var arr = [str1,str2,str3,str4,str5];
	for (var i = 0; i < arr.length; i++) {
		newstr += arr[i];
	}
	// 缺点,由于字符串存在栈里。每一次+=都要取出来。效率低。
	// 数组是堆内存。使用数组的方法更好
	
	// 思路2:还是放在数组中,用join直接连接成字符
	var arr = [str1,str2,str3,str4,str5];
	var newstr = arr.join("");

1.12 slipt 将字符串按某个字符分隔成数组

var str = "你好吗~亲爱的~中国";
	var newarr = str.split('~');//返回数组["你好吗", "亲爱的", "中国"]
								//从~分隔。
	str.split();//不传参或者传字符串中没有的字符时,
				//会将整个字符串转成数组["你好吗~亲爱的~中国"]				
	str.split("");//传空字符串时,将字符串每一个字都分隔成数组
				  //["你", "好", "吗", "~", "亲", "爱", "的", "~", "中", "国"]

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值