day10数组对象

1.回顾

js的对象分类
    本地对象/内部对象
            Math和Global对象比较特殊,内置对象 不需要创建就可以使用
  宿主对象
  自定义对象
  
  Math.floor  向下取整  直接舍弃小数部分
  Math.ceil   向上取整  只要有小数就进位
  Math.round
​
    Math.max
    Math.min
    Math.abs
​
    随机数  Math.random()  随机0-1之间的数 包含0不包含1
  公式:Math.floor(  Math.random() * (max-min+1) + min )
​
 Date日期对象
        现在时刻:new Date()  创建的是计算机这一时刻的时间
    创建任意时间:
         new Date(年,月-1,日,时,分,秒)
         new Date("年/月/日 时:分:秒")
      如何获取时间戳  时间.getTime()
​
String对象
   var str = ""  字面量创建
   var str1 = new String(2)  使用new关键字创建
   
   13个方法
   length 长度
   charAt(下标)  获取该下标对应的字符
   charCodeAt(下标)  获取该下标对应的字符编码
   indexOf  查找字符串在两个字符串首次出现的位置,找到会返回该位置的下标 如果找不到返回-1
   lastIndexOf
   
   截取字符串
     substr(start,count) 从开始下标开始截取 截取几个
     slice(start,end) 从开始下标开始截取 截取到end 但是不包含end
     substring(start,end) 从开始下标开始截取 截取到end 但是不包含end
     
   大小写
    toUpperCase
    toLowerCase
    
    trim  去除首尾空格
    replace  替换
    split(分割标识):根据分割标识分割字符串,并且返回一个数组

2.数组对象

  • 数组:存储数据的容器,可以存储任意数据类型,也可以存储多个

2.1创建数组

  • 字面量创建

​
        // 1.字面量创建
        var arr1 = ["1", "2", "3"];
        console.log(arr1);
       
  • 使用new关键创建

 // 2.使用new关键字创建
        var arr2 = new Array("1", "2", "3");
        console.log(arr2);
      
  • 数组的添加

       // 3.获取数组中的内容  数组[下标]  下标是从0开始
        console.log(arr1[0]);//"1"
        console.log(arr1[1]);//"2"
        // 4.通过下标的添加 数组[下标] = 值
        arr1[3] = "哈哈";
        console.log(arr1);//['1', '2', '3', '哈哈']
        arr1[6] = "嘻嘻";
        console.log(arr1);//['1', '2', '3', '哈哈', empty × 2, '嘻嘻']
  • ==注意事项==

    • 注意1:如果只有1个且类型为number的元素,代表创建长度为n的空数组

    • 注意2:arr1.属性名 = 属性值

        // 5.注意事项
        // 注意1:如果只有1个且类型为number的元素,代表创建长度为n的空数组
        var arr3 = new Array(3);
        console.log(arr3);// [empty × 3]
​
        // 注意2:arr1.属性名 = 属性值
        arr1.name = "zs";
        console.log(arr1.name);

2.2数据分类依据

typeof检测数据类型
 基本数据类型:数据结构比较单一,数据是存储在变量中的
      number类型的数据    number
      string类型的数据    string     
      boolean类型的数据   boolean 
      undefined         undefined 
      null              object
 复杂数据类型:数据的结构比较复杂 变量中存储的是内存地址 内存地址才会指向数据,如果共用一个内存地址,会出现一改全改的问题
       object类型数据    object
       array类型的数据   object
       funtion函数      function
  • 所存在的问题

 <script>
        // 基本数据类型
        var a = 10;
        var b = a;
        b = 20;
        console.log(a, b);//10,20
​
        // 复杂数据类型
        var arr1 = ["嘻嘻", "哈哈", "呵呵"];
        var arr2 = arr1;
        arr2[2] = "滴滴滴滴滴滴滴";
        console.log(arr1, arr2);// ["嘻嘻", "哈哈", "滴滴滴滴滴滴滴"]   ["嘻嘻", "哈哈", "滴滴滴滴滴滴滴"]
    </script>

2.3深浅拷贝

==深浅拷贝问题只针对于复杂数据类型==

  • 浅拷贝

        // 1.浅拷贝   会出现一改全改的问题
        var arr1 = ["嘻嘻", "哈哈", "呵呵"];
        var arr2 = arr1;
        arr2[2] = "滴滴滴滴滴滴滴";
        console.log(arr1, arr2);// ["嘻嘻", "哈哈", "滴滴滴滴滴滴滴"]   ["嘻嘻", "哈哈", "滴滴滴滴滴滴滴"]
  • 深拷贝

        // 2.深拷贝
        var arr1 = ["嘻嘻", "哈哈", "呵呵"];
        var arr2 = [];
        // 通过for循环将arr1中的内容复制过去
        for (var i = 0; i < 3; i++) {// i = 0 1 2
            arr2[i] = arr1[i];
        }
        arr2[2] = "dididididiidd";
        console.log(arr1, arr2);// ["嘻嘻", "哈哈", "呵呵"]    ["嘻嘻", "哈哈", "dididididiidd"]

2.4数组的方法

length

  • 获取数组的长度

数组的添加的删除

push

  • 语法:数组.push(数据1,数据2,数据3.....)

  • 作用:在数组的尾部添加一个或者多个数据 并且返回最新数组的长度

pop

  • 语法:数组.pop()

  • 作用: 在数组的尾部删除一个元素 返回被删除的数据

unshift

  • 语法:数组.unshift(数据1,数据2,数据3....)

  • 作用:在数组的头部添加一个或者多个数据 并且返回最新数组的长度

shift

  • 语法:数组.shift()

  • 作用: 在数组的头部删除一个元素 返回被删除的数据

       // 1.数组.push()  在数组的尾部添加一个或者多个数据 并且返回最新数组的长度
        var len = arr.push("哈哈", "嘻嘻");
        console.log(len);//6
        console.log(arr);// [1, 2, 3, 4, '哈哈', '嘻嘻']

        var len1 = arr.push("6", [true, false]);
        console.log(len1);// 8
        console.log(arr);//[1, 2, 3, 4, '哈哈', '嘻嘻',"6",[true,false]]
        // 2.数组.pop()  在数组的尾部删除一个元素 返回被删除的数据
        var arr = [1, 2, 3, 4];
        var len = arr.pop();
        console.log(len);//4
        console.log(arr);//[1,2,3]

        // 3.数组.unshift()  在数组的头部添加一个或者多个数据 并且返回最新数组的长度
        var arr = [1, 2, 3, 4];
        var len = arr.unshift(5, 6);
        console.log(len);//6
        console.log(arr);//[5,6,1,2,3,4];

        // 4.数组.shfit() 在数组的头部删除一个元素 返回被删除的数据
        var arr = [1, 2, 3, 4];
        var len = arr.shift();
        console.log(len);//1
        console.log(arr);//[2,3,4];

splice

  • 语法:数组.splice(start,count,items)

  • 作用:删除数组中一串连续的数组元素,被删除的元素会组成一个新的数组返回,使用items替换被删除的元素

  • 参数

    • start:开始删除的下标

    • count:删除的个数

    • items:替换的内容

				 var arr = [1, 2, 3, 4];
        // var arr1 = arr.splice(2);//如果不传count 删除到最后
        // console.log(arr1);//[3 4]
        // console.log(arr);//[1, 2]

        // var arr1 = arr.splice(1, 2);
        // console.log(arr1);//[2,3]
        // console.log(arr);//[1,4]

        var arr1 = arr.splice(1, 2, "嘻嘻");
        console.log(arr1);//[2,3]
        console.log(arr);//[1,"嘻嘻",4]

indexOf

  • indexof:查找元素在数组中首次出现的位置 如果找到则是返回下标位置 找不到返回-1

       //7.indexof:查找元素在数组中首次出现的位置 如果找到则是返回下标位置 找不到返回-1
        var arr = [1, 2, 3, 4];
        var res = arr.indexOf(1);
        console.log(res);//0

join

  • 数组.join(组合标识) 数组根据组合标识组成一个新的字符串

        // 8.join和字符串对象中split是搭配使用的
        // 字符串.split(分割标识)  字符串根据分割标识 将数据分割出来并组成一个新的数组
        var str = "123456"; //
        var newStr = str.split("");
        console.log(newStr);//['1', '2', '3', '4', '5', '6']
        // 数组.join(组合标识)  数组根据组合标识组成一个新的字符串
        var arr = [1, 2, 3, 4];
        var res = arr.join("");
        console.log(res);//1234;

concat

  • 数组.concat():将多个元素或者数组组成一个新的数组

 // 10.concat 将多个数组或者元素组合成一个新的数组
        var arr = ["19", true, false, undefined]
        var arr1 = arr.concat(10, 20, [30, 40]);
        console.log(arr1);//["19",true,false,undefined,10,20,30,40]

reverse

  • 数组.reverse():数组反转

 // 9.reverse 反转数组
        var arr = ["10", true, false, undefined];
        var arr1 = arr.reverse();
        console.log(arr1);

slice

  • slice(start,end) 截取数组中一连串的元素并且组成一个新的数组返回 包含开始不包含结束下标

var arr = [1, 2, 3, 4];
        // var arr1 = arr.slice(0, 2);
        // console.log(arr1);//[1,2]
        var arr1 = arr.splice(2)
        console.log(arr1);//[3,4]
		
  • ==数组的大部分方法都会改变原数据,字符串的方法不会改变原字符串==

2.5算法

2.5.1数组去重

  • indexOf去重

 // indexof去重
        var arr = [1, 2, 3, 4, 5, 1, 2, 1, 1, 6, 7, 8, 6, 9];
        // indexOf:查找元素在数组中首次出现的下标位置 如果找不到则是返回-1
        var newArr = [];
        for (var i = 0; i < arr.length; i++) {
            //什么时候将元素push到newArr?当前这个元素在newArr中找不到的时候会push进去
            if (newArr.indexOf(arr[i]) === -1) {
                newArr.push(arr[i]);
            }
        }
        console.log(newArr);    
  • splice去重

// splice去重
        /* 当前元素依次和后面的元素做比较  如果相等,就将重复元素删除 */
        var arr = [1, 1, 2, 3, 4, 5, 1, 2, 1, 1, 6, 7, 8, 6, 9];
        for (var i = 0; i < arr.length; i++) { // i = 0  1
            for (var j = i + 1; j < arr.length; j++) {// j = 1 2
                if (arr[i] === arr[j]) {
                    arr.splice(j, 1);
                    j--;
                }
            }
        }
        console.log(arr);

2.5.2选择排序

  • 拿一个元素,和后面所有的元素做比较 如果后面的元素比较小,就交换位置

   // 选择排序:拿一个元素依次和后面的元素做比较 如果后面的元素比较小 就交换位置
        var arr = [1,4,3,8,5]
        for (var i = 0; i < arr.length; i++) {// i = 0 1 2 3 4
            for (var j = i + 1; j < arr.length; j++) {
                if (arr[i] > arr[j]) {
                    var temp = arr[i]
                    arr[i] = arr[j]
                    arr[j] = temp;
                }
            }
        }
        console.log(arr);

2.5.3冒泡排序

  • 相邻的两个元素比较 如果后面比较小就交换位置

 <script>
        var arr = [10, 15, 8, 0, 2]
        /* 
            i = 0 结束 4    arr.length-1-i
            i = 1 结束 3
            i = 2 结束 2
            i = 3 结束 1
        */
        // 冒泡排序:相邻的两个元素进行比较  如果后面的元素比较小就交换位置
        for (var i = 0; i < arr.length - 1; i++) {// i = 0 1 2 3
            for (var 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>

3.面试题

1.数组的方法有哪些
2.数组的去重方法
3.选择排序的实现代码
4.冒泡排序的实现代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值