2021-08-04数组(冒泡,多维数组,数组方法)

冒泡排序 把元素按顺序排列

思路:遍历数组,第一个元素依次跟后面的元素比较,如果比较的元素比他小,则换位置,如果遇到的元素比他大,则不动,大的元素跟后面的元素比较,从第0个元素开始比较,第一轮比较了length - 1次,得到了一个最大的数,从第1个元素开始比较,第二轮比较了length - 1 - i次,得到了第二大的数字,以此类推

<script>
	var arr = [6,5,3,1,8,7,2,4];
	for(i = 0; i < arr.length - 1; i++){
        for(j = 0; j < arr.length - 1 - i; j++){
            if(arr[j] > arr[j+1]){
                var temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
	}
	console.log(arr);
</script>

注意:

  1. 思考对比的顺序,次数,每个数比较几次
  2. 两层for循环里,i和j的关系怎么表达
  3. 交换两个元素的方法
8.多维数组

数组里面套数组

应用场景:电商网站价格升序降序;前后台传递数据不可以传递汉字,使用数组代替

  1. 二维数组 两层数组嵌套

    <script>
    	var arr = [[1,2][3,4][5,6]];
    	console.log(arr[0][0]);		//输出arr里的第0个元素([12])里的第0个元素(1)
    	console.log(arr[1][1]);		//输出arr里的第1个元素([34])里的第1个元素(4)
    </script>
    
  2. 三维数组 三层数组嵌套

    <script>
    	var arr = [[[1,2][3,4][5,6]]];
    	console.log(arr[0][0][0]);	//输出arr里的第0个元素[[12][34][56]]里的第0个元素[12]里的第0个元素1
    </script>
    
9.数组方法
  • 对原数组有影响

    1. push 从末尾增 等于arr[arr.length] = ‘添加的元素’;

      push对原数组有影响,操作的是当前调用的数组

      <script>
      	var arr = [1,2,3,4,5];
      	// 在末尾添加一个元素,多个元素,数组
      	var newArr = arr.push(6);
      	var newArr = arr.push(7,8,9);
      	var newArr = arr.push(['张三','李四','王五']);
      	// 返回的是添加后的数组的length
      	console.log(newArr);
      	// 打印数组返回的是添加元素后的原数组
      	console.log(arr);
      </script>
      
    2. pop 从末尾删 等于arr.length–;
      pop对原数组有影响

      <script>
      	var arr = [1,2,3,4,5];
      	// 从末尾删除一个元素
      	var newArr = arr.pop();
      	// 返回结果是被删除的那个元素
      	console.log(newArr);
      	// 打印数组返回的是删除后的原数组
      	console.log(arr);
      </script>
      
    3. unshift	从头部增			
       等于for(i = arr.length; i >= 0; i++){
       ​	      arr[i] = arr[i-1]
       ​	} 
       unshift对原数组有影响
       
    
<script>
    		var arr = [1,2,3,4,5];
    		// 从头部增加一个元素,多个元素,数组
    		var newArr = arr.unshift(0);
    		var newArr = arr.unshift(5,4,3,2,1);
    		var newArr = arr.unshift([6,7,8,9]);
    		// 返回的是增加后数组的长度
    		console.log(newArr);
    		// 打印数组返回的是增加后的原数组
    		console.log(arr);
    </script>
 4. shift	从头部删
  等于for(i = 0; i < arr.length - 1; i++){
 ​		arr[i] = arr[i+1];
 ​	} 
  shift对原数组有影响
     <script>
     	var arr = [1,2,3,4,5];
     	// 删除头部的数据
     	var newArr = arr.shift();
     	// 返回结果是被删除的那个元素
     	console.log(newArr);
     	// 打印数组返回的是删除后的原数组
     	console.log(arr);
     </script>
  1. splice 增删改一体化

    对原数组有影响

    1. 一个参数
    <script>
    	var arr = [1,2,3,4,5];
    	// 一个参数代表保留几个元素,剩下的都删除掉
    	var newArr = arr.splice(2);
    	// 如果参数超过数组长度,那么就保留所有元素
    	var newArr = arr.splice(30);
    	// 返回的结果是删除的元素组成的数组
    	console.log(newArr);
    	// 打印数组返回的是删除后的新数组
    	console.log(arr);
    </script>
    
    1. 两个参数
    <script>
    	// 两个参数代表删除,第一个参数代表从哪开始(下标),第二个参数代表删除几个
    	// 对原数组有影响
    	var arr = [1,2,3,4,5,6,7,8,9];
    	// 两个参数,代表从下标是1的元素开始,删除3个
    	var newArr = arr.splice(1,3);
    	// 返回的结果是被删除的元素组成的数组
    	console.log(newArr);
    	// 返回的结果是删除后的新数组
    	console.log(arr);
    </script>
    
    1. 多个参数

    增加

    <script>
    	// 多个参数,第一个参数代表从哪开始(下标);第二个参数代表删除几个,第三个参数往后代表新增的元素
    	var arr = [1,2,3,4,5,6,7,8,9];
    	// 多个参数,代表从下标是2的元素开始,删除0个,添加'a','张三',996三个元素
    	var newArr = arr.splice(2,0,'a','张三',996);
    	// 返回的结果是被删除的元素,第二个参数是0则代表删除0个元素,返回的是没有内容
    	console.log(newArr);
    	// 打印的结果是增加后的原数组
    	console.log(arr);
    </script>
    

    ​ 修改

    <script>
    	var arr = [1,2,3,4,5,6,7,8,9];
    	// 多个参数,代表从下标是3的元素开始,删除2个元素,添加'修改','再改'两个元素
    	var newArr = arr.splice(3,2,'修改','再改');
    	// 返回的结果是被删除的元素,从下标是3的元素开始,删除2个元素,返回4,5
    	console.log(newArr);
    	console.log(arr);
    </script>
    

    是添加,还是修改,这取决于第二个参数,如果第二个参数是0,则代表没有删除元素,第三个元素以及后面的元素就是添加上了;如果第二个参数是别的数字,则代表删除了相应个数的元素,第三个参数以及后面你的从参数都是替换上去的修改的元素

  2. reverse 翻转数组

    对原数组有影响

    <script>
    	var arr = [1,2,3,4,5];
    	// reverse后面的括号内没有内容
    	var newArr = arr.reverse();
    	// 返回的结果是翻转后的数组
    	console.log(newArr);
    	// 打印的结果是翻转后的原数组
    	console.log(arr);
    </script>
    
  3. sort 排序,默认情况下比较的是ascii码,按升序排序
    对原数组有影响

     <script>
     	var arr = [6,5,8,7,3,1,2,4];
     	// sort后面的括号没有内容
     	var newArr = arr.sort();
     	// 返回的值是排序后的数组
     	console.log(newArr);
     	// 打印的结果是排序后的数组
     	console.log(arr);
     </script>

按ascii码,升序排序

   <script>
   	var arr = ['2313123','2131423412'];
   	var newArr = arr.sort();
   	console.log(newArr);
   	console.log(arr);
   </script>
  • 对原数组没有影响

    1. join 用指定的字符串,把数组中的元素拼接成一个字符串,但是最终输出的是字符串
      对原数组没有影响

      <script>
      	var arr = [1,2,3,4,5,6];
      	// 用字符串#把元素链接起来,拼接成一个新的字符串
      	var newArr = arr.join('#');
      	// 返回的值为1#2#3#4#5#6
      	console.log(newArr);
      	// 打印结果还是原数组,不受影响
      	console.log(arr);
      </script>
      

      如果join后面的括号内没有标明用什么来拼接,则默认是用逗号拼接

      <script>
      	var arr = [1,2,3,4,5,6];
      	// 默认用逗号拼接
      	var newArr = arr.join();
      	// 返回的值为1,2,3,4,5,6
      	console.log(newArr);
      	// 打印结果还是原数组,不受影响
      	console.log(arr);
      </script>
      

      如果join后面的括号内是空字符串,那就没有任何连接,直接拼接,但是最终输出的是字符串

      <script>
      	var arr = [1,2,3,4,5,6];
      	// 没有拼接的字符串
      	var newArr = arr.join('');
      	// 返回的值为123456
      	console.log(newArr);
      	// 打印结果还是原数组,不受影响
      	console.log(arr);
      </script>
      

      应用场景:前后端互相传递数据时,使用的是数组则不允许传递,解决策略是使用join方法拼接成字符串,然后就可以传递了

    2. concat 拼接一个值
      对原数组没有影响

      • 拼接一个元素

        <script>
        	var arr = [1,2,3];
        	// 在数组后面拼接一个元素
        	var newArr = arr.concat(4);
        	// 打印结果为1,2,3,4 
        	console.log(newArr);
        	// 打印结果还是原数组,不受影响
        	console.log(arr);
        </script>
        
      • 拼接多个元素

        <script>
        	var arr = [1,2,3];
        	// 在数组后面拼接一个元素
        	var newArr = arr.concat(4,5,6);
        	// 打印结果为1,2,3,4,5,6
        	console.log(newArr);
        	// 打印结果还是原数组,不受影响
        	console.log(arr);
        </script>
        
      • 拼接数组

        <script>
        	var arr = [1,2,3];
        	// 在数组后面拼接一个元素
        	var newArr = arr.concat([4,5,6]);
        	// 打印结果为1,2,3,4,5,6;把原数组拆了,添加进去
        	console.log(newArr);
        	// 打印结果还是原数组,不受影响
        	console.log(arr);
        </script>
        
    3. slice 截取数据
      截取数据,左闭右开,(下标)从第一个参数开始截取,包含这个参数,到第二个参数截止,不包含第二个参数

      • 两个参数

        <script>
        	var arr = [1,2,3,4,5];
        	// 从下标为1的元素开始截取,包含下标为1的元素,到下标为3的元素截止,不包含下标为3的元素
        	var newArr = arr.slice(1,3);
        	// 返回的结果是截取到的元素
        	console.log(newArr);
        	// 打印结果还是原数组,不受影响
        	console.log(arr);
        </script>
        
      • 一个参数

        <script>
        	var arr = [1,2,3,4,5];
        	// 如果只有一个值,代表的是开始的值,直到结束
        	var newArr = arr.slice(2);
        	// 打印结果为从下标是2的元素开始,一直截取到最后一个元素
        	console.log(newArr);
        	// 打印结果还是原数组,不受影响
        	console.log(arr);
        </script>
        
    4. valueOf 将Object数据类型转换为基本数据类型

      <script>
      	var arr = [1,2,3,4,5];
      	console.log(typeof arr);
      	var newArr = arr.valueOf();
      	console.log(typeof newArr);
      	// 打印结果还是原数组,不受影响
      	console.log(arr);
      	console.log(typeof newArr);
      	console.log(arr == newArr);
      </script> 
      
    5. tostring 把数组变成字符串

      <script>
      	var arr = [1,2,3,4,5];
      	// 把数组转换成字符串
      	var newArr = arr.toString();
          // 输出结果为1,2,3,4,5(字符串类型)
      	console.log(newArr);
      	// 打印结果还是原数组,不受影响
      	console.log(arr);
      </script> 
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值