美文网首页
JS-day06-5.4

JS-day06-5.4

作者: xcx时光你好 | 来源:发表于2018-05-10 22:01 被阅读0次

Array对象

  • 创建数组对象的两种方式
    • ==字面量方式==
    • ==new Array()==
// 1. 使用构造函数创建数组对象
    // 创建了一个空数组
    var arr = new Array();
    // 创建了一个数组,里面存放了3个字符串
    var arr = new Array('zs', 'ls', 'ww');
    // 创建了一个数组,里面存放了4个数字
    var arr = new Array(1, 2, 3, 4);
    
    
    // 2. 使用字面量创建数组对象
    var arr = [1, 2, 3];
    
    // 获取数组中元素的个数
    console.log(arr.length);
  • 检测一个对象是否是数组
    • ==instanceof==
    • ==Array.isArray()== HTML5中提供的方法,有兼容性问题
      函数的参数,如果要求是一个数组的话,可以用这种方式来进行判断
      案例解析
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript">
        //如何创建数组对象
        // 1.数组字面量[]
     //     var array=[];//空数组
     //     var numbers=[1,5,3];
            // 2.数组的构造函数Array
            // var array=new Array();//空数组
            // var numbers=new Array(4,2,8);
            // console.log(numbers);//(3) [4, 2, 8]

            // //获取数组长度
            // console.log(numbers.length);//3

            //如何判断一个变量是否是数组对象
            function fn(arr) {
            //判断参数arr  是否是数组对象
            //instanceof   前面是变量 后面是数组对象
            console.log(arr instanceof Array);

            //!arr instanceof Array
            //false instanceof Array
            //方式1  !一元运算符优先级最高
            if(!(arr instanceof Array)) {
                console.error('参数err  不是数组对象');
                return;
            }


            //方式2 Array.isArray() 浏览器兼容性问题 支持HTML5的支持
            // console.log(Array.isArray(arr));
             console.log('正常执行');
            }
             var d=1;
             // var d=[];
            fn(d);
    </script>
</head>
<body>
    
</body>
</html>
  • toString()/valueOf()
    • ==toString() 把数组转换成字符串,逗号分隔每一项==
    • ==valueOf() 返回数组对象本身==
      案例解析
//toString()和valueOf()  每一个对象都含有这两个方法,只不过不同对象输出的结果不同
        // var arr=[5,1,8,6];
        // console.log(arr);//(4) [5, 1, 8, 6]
        // //toString()把数组转换成字符串,并且使用逗号分隔每一项
        // console.log(arr.toString()); //5,1,8,6
        // //valueOf() 返回数组对象本身
        // console.log(arr.valueOf());//(4) [5, 1, 8, 6]
  • 数组常用方法

    演示:push()、shift()、unshift()、reverse()、sort()、splice()、indexOf()

// 1 栈操作(先进后出)
    push()
    pop()       //取出数组中的最后一项,修改length属性
    // 2 队列操作(先进先出)
    push()
    shift()     //取出数组中的第一个元素,修改length属性
    unshift()   //在数组最前面插入项,返回数组的长度
    // 3 排序方法
    reverse()   //翻转数组
    sort();     //即使是数组sort也是根据字符,从小到大排序
    // 带参数的sort是如何实现的?
    // 4 操作方法
    concat()    //把参数拼接到当前数组
    slice()     //从当前数组中截取一个新的数组,不影响原来的数组,参数start从0开始,end从1开始
    splice()    //删除或替换当前数组的某些项目,参数start, deleteCount, options(要替换的项目)
    // 5 位置方法
    indexOf()、lastIndexOf()   //如果没找到返回-1
    // 6 迭代方法 不会修改原数组(可选)
    every()、filter()、forEach()、map()、some()
    // 7 方法将数组的所有元素连接到一个字符串中。
    join()

案例解析

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript">
    //如何学习一个方法
      // 1.了解方法的作用
      // 2.方法的参数
      // 3.方法的返回值
      // 4.测试,编写一个demo
 // // 1 栈操作(先进后出)
         // var arr=[12,2,6,9]; 
  //   push()
         // arr.push(5);
         // console.log(arr);//(5) [12, 2, 6, 9, 5] 返回值在原数组的最后面加了一项
         // console.log(arr.push());//5 返回的是修改后的数组的长度
         // console.log(arr.push(5));//6
         // console.log(arr);//(6) [12, 2, 6, 9, 5, 5]
         // //push中参数可以有多个,将来都会添加到数组的最后
         // //返回值,就是改变后的数组的长度
         // var r=arr.push(5,8,9);
         // console.log(r);//9
         // console.log(arr); //(9) [12, 2, 6, 9, 5, 5, 5, 8, 9]
  

  //   pop()        //取出数组中的最后一项,修改length属性
           
            // arr.pop();
            // console.log(arr.length);//3 返回的是数组的长度
            // console.log(arr);//(3) [12, 2, 6] 返回值中原数组的最后一项被删除了
            // console.log(arr.pop());//6 返回的是修改后的数组的最后一项
  

  //   // 2 队列操作(先进先出)
  //   push()
  //   shift()      //取出数组中的第一个元素,修改length属性
         // var array=[6,3,2,4];
         // var first=array.shift();
         // console.log(first);  //6 返回的值是原数组的第一项
         // console.log(array); // [3, 2, 4]  返回的值中原数组的第一项被取走了

  //   unshift()    //在数组最前面插入项,返回数组的长度
          // array.unshift(0);
          // console.log(array); //(4) [0, 3, 2, 4]
          // console.log(array.unshift()); //4 返回修改后的数组的长度


  //   // 3 排序方法
  //   reverse()    //翻转数组
         // var arr=['b','f','b','f','a','f'];
         //翻转 reverse() 不会修改原数组,会把数组翻转之后返回一个新的数组
         // var newArray=arr.reverse();
         // console.log(newArray);//(6) ["f", "a", "f", "b", "f", "b"]
  
  //   sort();  //即使是数组sort也是根据字符,从小到大排序
          // arr.sort();
          // console.log(arr); //(6) ["a", "b", "b", "f", "f", "f"]  sort()直接在原数组上进行排序

          // var array=[85,3,5,80]; 
          //默认情况下的sort是对字符编码 从小到大排序  对我们来说无意义
          // array.sort();
          // console.log(array); //(4) [3, 5, 80, 85]
          //字符编码  a--97


          // sort()的另一种方法
          // array.sort();
          // array.sort(compareFunction)

          // function compare(a,b) {
          //    return a-b;
          // }
          // array.sort(compare);
          // console.log(array); //(4) [3, 5, 80, 85] 返回值按照数值的大小排序的

           // array.sort(function(a,b) {
           //      return a-b;
           // });
           // console.log(array); //(4) [3, 5, 80, 85] 返回值按照数值的大小排序的


           // var arr=['aa','dddd','xx','x','vvv'];
           // arr.sort(function(a,b) {
           //   return a.length-b.length; //字符串的长度
           // })
           // console.log(arr); //(5) ["x", "aa", "xx", "vvv", "dddd"]  想要从大到小排序将b.length-a.length 即可
           

            //对数组排序 从小到大 ---冒泡排序
            // function sort(arr,fnCompare) {
            //     for(var i=0;i<arr.length-1;i++) {
            //        for(var j=0;j<arr.length-1-i;j++) {
            //             if (fnCompare(arr[j],arr[j+1])>0) {
            //                   t=arr[j];
            //                   arr[j]=arr[j+1];
            //                   arr[j+1]=t;
            //              }
            //         }
            //     }
            //     return arr;
            // }
            // var arr=[50,6,2,8];
            // sort(arr,function(a,b){
            //   return a-b;
            // })
            // console.log(arr);//(4) [2, 6, 8, 50]
            
  //   // 带参数的sort是如何实现的?
  //   // 4 操作方法
  //   concat()     //把参数拼接到当前数组
  //   slice()  //从当前数组中截取一个新的数组,不影响原来的数组,参数start从0开始,end从1开始
  //   splice() //删除或替换当前数组的某些项目,参数start, deleteCount, options(要替换的项目)
  //   // 5 位置方法
  //   indexOf()、lastIndexOf()   //如果没找到返回-1
  //   // 6 迭代方法 不会修改原数组(可选)
  //   every()、filter()、forEach()、map()、some()
  //   // 7 方法将数组的所有元素连接到一个字符串中。
  //   join()

          //  var  arr=[1,5,6,2,8];
          //  console.log(arr);
          // // 清空数组的3种方法
          //    // arr=[];
          //    // console.log(arr);

          //    // arr.length=0;
          //    // console.log(arr);
             
          //    //第一个参数,是从什么位置开始删除(索引)
          //    //第二个参数,是删除多少个元素
          //    arr.splice(0,arr.length);
          //    console.log(arr);
    </script>
</head>
<body>
    
</body> 
</html>
  • 清空数组
// 方式1 推荐 
    arr = [];
    // 方式2 
    arr.length = 0;
    // 方式3
    arr.splice(0, arr.length);

案例

  • 将一个字符串数组输出为|分割的形式,比如“刘备|张飞|关羽”。使用两种方式实现
function myJoin(array, seperator) {
      seperator = seperator || ',';
      array = array || [];
      if (array.length == 0){
        return '';
      }
      var str = array[0];
      for (var i = 1; i < array.length; i++) {
        str += seperator + array[i];
      }
      return str;
    }
    var array = [6, 3, 5, 6, 7, 8, 0];
    console.log(myJoin(array, '-'));
    
    console.log(array.join('-'))
  • 将一个字符串数组的元素的顺序进行反转。["a", "b", "c", "d"] -> [ "d","c","b","a"]。使用两种种方式实现。提示:第i个和第length-i-1个进行交换
function myReverse(arr) {
      if (!arr || arr.length == 0) {
        return [];
      }
      for (var i = 0; i < arr.length / 2; i++) {
        var tmp = arr[i];
        arr[i] = arr[this.length - i - 1];
        arr[arr.length - i - 1] = tmp;
      }
      return arr;
    }
    
    var array = ['a', 'b', 'c'];
    console.log(myReverse(array));
    
    console.log(array.reverse());
  • 工资的数组[1500, 1200, 2000, 2100, 1800],把工资超过2000的删除
// 方式1
    var array =  [1500,1200,2000,2100,1800];
    var tmpArray = [];
    for (var i = 0; i < array.length; i++) {
      if(array[i] < 2000) {
        tmpArray.push(array[i]);
      }
    }
    console.log(tmpArray);
    // 方式2
    var array =  [1500, 1200, 2000, 2100, 1800];
    array = array.filter(function (item, index) {
      if (item < 2000) {
        return true;
      }
      return false;
    });
    console.log(array);

  • ["c", "a", "z", "a", "x", "a"]找到数组中每一个a出现的位置
 var array =  ['c', 'a', 'z', 'a', 'x', 'a'];
    do {
      var index = array.indexOf('a',index + 1);
      if (index != -1){
        console.log(index);
      }
    } while (index > 0);
  • 编写一个方法去掉一个数组的重复元素
 var array =  ['c', 'a', 'z', 'a', 'x', 'a'];
    function clear() {
      var o = {};
      for (var i = 0; i < array.length; i++) {
        var item = array[i];
        if (o[item]) {
          o[item]++;
        }else{
          o[item] = 1;
        }
      }
      var tmpArray = [];
      for(var key in o) {
        if (o[key] == 1) {
          tmpArray.push(key);
        }else{
          if(tmpArray.indexOf(key) == -1){
            tmpArray.push(key);
          }
        }
      }
      returm tmpArray;
    }
    
    console.log(clear(array));

基本包装类型

为了方便操作基本数据类型,JavaScript还提供了三个特殊的引用类型:String/Number/Boolean

// 下面代码的问题?
// s1是基本类型,基本类型是没有方法的
var s1 = 'zhangsan';
var s2 = s1.substring(5);

// 当调用s1.substring(5)的时候,先把s1包装成String类型的临时对象,再调用substring方法,最后销毁临时对象, 相当于:
var s1 = new String('zhangsan');
var s2 = s1.substring(5);
s1 = null;

// 创建基本包装类型的对象
var num = 18;               //数值,基本类型
var num = Number('18');     //类型转换
var num = new Number(18);   //基本包装类型,对象
// Number和Boolean基本包装类型基本不用,使用的话可能会引起歧义。例如:
var b1 = new Boolean(false);
var b2 = b1 && true;        // 结果是什么

String对象

  • 字符串的不可变
var str = 'abc';
    str = 'hello';
    // 当重新给str赋值的时候,常量'abc'不会被修改,依然在内存中
    // 重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变
    // 由于字符串的不可变,在大量拼接字符串的时候会有效率问题
  • 创建字符串对象
var str = new String('Hello World');
    
    // 获取字符串中字符的个数
    console.log(str.length);
  • 字符串对象的常用方法
    字符串所有的方法,都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串
// 1 字符方法
    charAt()        //获取指定位置处字符
    charCodeAt()    //获取指定位置处字符的ASCII码
    str[0]          //HTML5,IE8+支持 和charAt()等效
    // 2 字符串操作方法
    concat()        //拼接字符串,等效于+,+更常用
    slice()         //从start位置开始,截取到end位置,end取不到
    substring()     //从start位置开始,截取到end位置,end取不到
    substr()        //从start位置开始,截取length个字符
    // 3 位置方法
    indexOf()       //返回指定内容在元字符串中的位置
    lastIndexOf()   //从后往前找,只找第一个匹配的
    // 4 去除空白   
    trim()          //只能去除字符串前后的空白
    // 5 大小写转换方法
    to(Locale)UpperCase()   //转换大写
    to(Locale)LowerCase()   //转换小写
    // 6 其它
    search()
    replace()
    split()
    fromCharCode()
    // String.fromCharCode(101, 102, 103);   //把ASCII码转换成字符串

案例

  • 截取字符串"我爱中华人民共和国",中的"中华"
var s = "我爱中华人民共和国";
    s = s.substr(2,2);
    console.log(s);
  • "abcoefoxyozzopp"查找字符串中所有o出现的位置
 var s = 'abcoefoxyozzopp';
    var array = [];
    do {
      var index = s.indexOf('o', index + 1);
      if (index != -1) {
        array.push(index);
      }
    } while (index > -1);
    console.log(array);
  • 把字符串中所有的o替换成!
 var s = 'abcoefoxyozzopp';
    do {
      s = s.replace('o', '');
    } while (s.indexOf('o') > -1);
    console.log(s);
    
    console.log(s.replace(/o/ig, ''));
  • 判断一个字符串中出现次数最多的字符,统计这个次数

相关文章

  • JS-day06-5.4

    Array对象 创建数组对象的两种方式==字面量方式====new Array()== 检测一个对象是否是数组==...

网友评论

      本文标题:JS-day06-5.4

      本文链接:https://www.haomeiwen.com/subject/paatdftx.html