JS08

    技术2022-08-11  93

    上午: 1)冒泡排序

    2)选择排序

    3)补充数组的方法 3.1) arr.concat(数组) / arr.concat(数字) 3.2)arr.slice(start, end)【索引】 3.3) splice【索引】 返回值被截取出来的内容 删除:arr.splice(索引,删除的个数) 插入: arr.splice(索引,删除的个数(0代表不删除),插入的的) 替换: arr.splice(索引,删除的个数(1代表删除一个),插入的,替换的)

    下午: 1)栈和堆 栈:基本数据类型:存储在栈空间 堆:引用数据类型:数据存储在堆空间,地址(变量名)存储在栈空间

    2) 数组的深拷贝和浅拷贝(深拷贝和浅拷贝只出现在引用数据里) 浅拷贝就是【地址拷贝(赋值)】 arr1 = arr2 将会共享一个地址 深拷贝实际是【复制的数据】 全局变量 跟里面的局部变量 相互独立 3) 函数值传递和引用传递 (理解) 案例:concat方法封装 案例:数组去重的方法

    作业: 1 排序 冒泡和选择 2 封装 concat 3.从数组中随机取出一项(randomItemFromArray) 4.求数组中所有元素的和(addAllInArray) 5.求一组数的最大数和最小数(getOneFromArray) 6.去重 7.随机生成4位验证码(randomCode 范围[a-z|0-9|A-Z]) // arr = [] // 验证的时候,不区分大小写

    案例:冒泡排序大数下沉

    var arr = [8, 0, 1, 5, 99, 100, 88, 77]; for (var i = 0; i < arr.length - 1; i++) { for (var j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j + 1]) { var temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } document.write(arr + '<br />');

    案例:冒泡排序小数前挪

    var arr = [8, 0, 1, 5,99,100,8,6,2,3]; // 外层循环只需要比较三次 所以需要arr.length-1 for (var i = 0; i < arr.length - 1; i++) { // 内层循环相邻两个数比较 // 代码优化 这里的j>0可以写成j>i for (var j = arr.length - 1; j > i; j--) { //arr.length-1是数组里面的最后一位数 if (arr[j] < arr[j - 1]) { var temp = arr[j - 1]; arr[j - 1] = arr[j]; arr[j] = temp; } document.write(arr + '<br />'); } }

    案例:选择排序第一种

    var arr = [9, 8, 7, 6, 5, 4, 3, 2, 1]; /* 1、我们要拿第一个数跟后面所有的数比较 2、保证第一个值永远最小 第二次保证第二个值最小... */ // 外层比较8次 所以是arr.length - 1 for(var i = 0 ; i < arr.length - 1 ; i++){ for(var j = i + 1 ; j < arr.length ; j++){ //var j = i+1 是第二数跟第一个数var i = 0比较 if(arr[i] > arr[j]){ var temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } document.write(arr)

    案例:选择排序经典(掌握)

    ```javascript var arr = [9, 8, 7, 6, 5, 4, 3, 2, 1] for (var j = 0; j < arr.length; j++) { var min = j //假设一个数是最小的 这里的j是索引 for (var i = j + 1; i < arr.length; i++) { var i = j+1 是第二数跟第一个数var j = 0比较 if (arr[min] > arr[i]) { //比较的是索引 min = i } } if (min != j) { var temp = arr[j]; //比较的是值 arr[j] = arr[min]; arr[min] = temp; } } document.write(arr);

    案例:concat方法封装

    1 首先声明一个空数组 2 把arr1追加进去 3 判断arr2是不是数组 如果是数组,就把arr2也追加进去 如果不是,就判断arguments的个数,从角标为1开始追加进数组 function concat(arr, b) { // 定义一个空数组 var res = []; if (Array.isArray(arr)) { //判断是不是数组 for (var i in arr) { res.push(arr[i]); } }else{ // 传入的参数不对 直接结束整个函数 return; } 判断第二个参数是不是数组 if(Array.isArray(b)){ for(var i in b){ res.push(b[i]) //因为不清楚b是不是数组 因为是数字的话直接是res.push(b) } } else{ // 如果不是,就判断arguments的个数,从角标为1开始追加进数组 for( var i =1; i<arguments.length;i++){ res.push(arguments[i]); } } return res; } console.log(concat([1,2,3],'a','v'))

    案例:第一种方法:数组去重

    var arr = [1, 1, 4, 6, 4, 5, 2, 9]; // 拿第一个数和所有的做比较 有重复的就删除 for (var i = 0; i < arr.length - 1; i++) { //比较的次数 最后一次没有比较 所以是arr.length-1 // 拿第二个数和所有的做比较,有重复的就删除 for (var j = i + 1; j < arr.length; j++) { if (arr[i] == arr[j]) { arr.splice(j, 1); //第一个如果重复就删除 第二个是删除的个数 // 【只要删除就会有数组塌陷】你要遍历这个数组 结果数字删了一个 j--; // } } } document.write(arr);

    案例:第二种方法选择排序

    Processed: 0.013, SQL: 9