数组常用方法以及字符串

73 阅读6分钟

数组方法

6.sort()

语法:
    1.不传参:
          数组.sort()
    2.传参 :
          数组.sort(function(a,b){return a-b})
          数组.sort(function(a,b){return b-a})
作用:
    1.不传参:
          将数组内部的数据, 全部转换为 字符串一位一位的对比
    2.传递参数:
          a - b : 按照从小到大的排列方式
          b - a : 按照从大到小的排列方式
    3.返回值:
          不传参数:
                  将排序后的数组返回
          传参数:  
                  将排序后的数组返回        
// 6. sort()   不传参数
     var arr = [3, 2, 20, 1, 100, 10000];
     var tet = arr.sort();
     console.log(arr); //  [1, 100, 10000, 2, 20, 3]
     console.log(tet);  // [1, 100, 10000, 2, 20, 3]  得到一个新数组

// 传参 a , b
    var tst = arr.sort(function (a, b) { return a - b });
    console.log(tst); // [2, 5, 6, 10]
    var tst = arr.sort(function (a, b) { return b - a });
    console.log(tst); //  [10, 6, 5, 2]
注意事项:
面试时不要直接说  
           数组.sort()/数组.sort(function(a,b){return a-b});
           数组.sort(function(a,b){return b-a});
7.splice()
    语法:数组.splice(开始索引,多少个)
        数组.splice(开始索引,多少个,要插入的数据1,要插入的数据1,要插入的数据2,要插入的数据3,...)
              【注意不是替换,而是剪切后放到该位置】
    作用: 类似于剪切  如果有第三个或者更多的参数, 那么会将第三个开始的参数,追加到数组中, 位置是从开始截取的位置开始追加
    返回值:截取到的数据(以数组的形成)

上述方法, 都能够改变原数组

 8.slice();(面试常问)
      语法:
           数组.slice(开始索引,结束索引)
      参考特点:
           1.包头不包尾;包含开始索引,不包含结束索引
           2.参数接受负数(相当于数.Length +负数)
           3.参数可以不传递
        => 结束下标不传, 相当于 从开始下标复制到数组的末尾
        => 两个参数都不传递, 相当于从 [0] 复制到数组的末尾
      作用:   
           类似于复制
      返回值: 
           复制出来的数组
9. concat();
      语法:
           数组.concat(参数1,数据1,数据2,...);
      作用: 
           将小括号内的数据。合并到当前数组中
      返回值:
           合并的数组返回出来

10.join();
      语法:
           数组.join('链接符');
      作用: 
           作用:通过连接符,将数组的每一项合并起来,如果不传递连接符,默认按照逗号连接
      返回值:
           连接好的数据(字符串)

11. indexof
      语法:
           数组.indexof(下标)/数组.indexof(数据,从哪里开始)
      作用:
           在数组内寻找你传入的数据
      返回值:
           如果找到了,那么返回这个数据第一次出现的下标
           如果没找到,,返回-1
    
12.lastIndexOf(默认从数组的末尾,找到[0])
      语法:
          数组.lastIndexOf(下标) /数组.lastIndexOf(数据,从哪里开始)
      作用:
          在数组内寻找你传入的数据
   返回值:
          如果找到了,那么返回这个数据第一次出现的下标
          如果没找到,,返回-1

代码解析:
//7. splice()    
    // var arr = [1, 2, 3, 4, 5, 6, 7]
    //            0  1  2  3  4  5  6
    // //  传递两个参数
    // var res = arr.splice(2, 3);
    // console.log('arr:', arr); //[1, 2, 6, 7]
    // console.log('res', res); // [3, 4, 5]

    // //  传递多个参数
    // var res = arr.splice(2, 3, 'QF001', 'QF002', [1, 2, 3], 'QF003', 'QF004', 'QF005')   // 从 [2] 开始, 截取(剪切) 3个
    // console.log('res:', res);  //  [3, 4, 5]
    // console.log('arr:', arr);  // [1, 2, 'QF001', 'QF002', [1, 2, 3], 'QF003', 'QF004', 'QF005', 6, 7]


    // var res = arr.slice(3, 5);
    // console.log(res); //[4 ,5]  不包含5
    // console.log(arr); //[1, 2, 3, 4, 5, 6, 7]

    /**
         *  从 [3] 开始, 如果参数写了负数
         *  相当于 数组.length + 负数 -> 7 + (-2) -> 7 - 2 -> 5
         *
         *  所以 (3, -2)        相当于 (3, 5)
    */
    // var res1 = arr.slice(3, -2); // 相当于(3,5)
    // console.log(res1);// [4,5]
    // var res2 = arr.slice(-3, -2);// 相当于(4,5)
    // console.log(res2);// [5]
    // 注意 返回的是数组  小括号内是索引

    // var res3 = arr.slice(4);
    // console.log(res3);// [5, 6, 7]

    //  var  res4 = arr.slice();
    //  console.log('复制后的 返回值:',res4); //[1, 2, 3, 4, 5, 6, 7]

    //  8. concat();
    // var arr = [1, 2, 3];
    // var res = [4, 5, 6,];
    // var newArr = arr.concat(res);
    // console.log(newArr); //[1, 2, 3, 4, 5, 6]

    // 9. join()
    // var tet = arr.join('#');
    // console.log(tet);//1#2#3#4#5#6#7 返回的不是数组

    // 10. indexOf

    // var tet1 = arr.indexOf(100);
    // console.log(tet1); // -1
    // var tet2 = arr.indexOf(2, 3);
    // //  注意 方法名大小写
    // console.log(tet2);//-1

    // var tst = arr.lastIndexOf(3);
    // var tst = arr.lastIndexOf(3, 4);
    // console.log(tst);// 2
    // // 返回下标


 1. forEach
     语法:数组.forEach(function(item,index,origin){遍历要执行的代码}
     item : 遍历数组的当前项
     index :  item 对应的下标
     origin : 对应的原数组
     作用: 遍历数组
     返回值:  forEach 永远没有返回值,他的值永远是 undefined


    2. map
     语法:数组.map(function(item,index,origin){遍历要执行的代码}
     参考 forEach
     item : 遍历数组的当前项
     index :  item 对应的下标
     origin : 对应的原数组
     作用: 映射数组,映射出来一个数组长度与原数组一模一样的数组,但是新数组的值,取决于return
     返回值: 映射出来的数组

 使用for 循环遍历数组
     for (var i = 0; i < arr.length; i++) {
       console.log(arr[i]);
     }

 3.filter
     语法:数组.filter(function(item,index,origin){遍历要执行的代码}
     item : 遍历数组的当前项
     index :  item 对应的下标
     origin : 对应的原数组
     作用: 过滤数组
     返回值:  过滤后的新数组,过滤条件  取决于函数内的  return

  4.find
     语法:数组.find(function(item,index,origin){遍历要执行的代码}
     item : 遍历数组的当前项
     index :  item 对应的下标
     origin : 对应的原数组
     作用: 查找数据
     返回值:  在数组内找到的 第一个符合条件的数据(不是数组)
              如果没有找到  返回  undefined
  5.findindex
     语法:数组.findindex(function(item,index,origin){遍历要执行的代码}
     item : 遍历数组的当前项
     index :  item 对应的下标
     origin : 对应的原数组
     作用: 查找数据  第一次出现的   下标
     返回值:  在数组内找到的第一个符合条件的  数据的 下标 
              如果没有找到  返回  undefined 

  6. every
     语法:数组.every(function(item,index,origin){遍历要执行的代码}
     item : 遍历数组的当前项
     index :  item 对应的下标
     origin : 对应的原数组
     作用: 判读数据里面 "每一项" 都符合条件
     返回值:  一个布尔值
      true  都符合条件
      false  最少有一个不符合条件的

 7.some 
     语法:数组.some(function(item,index,origin){遍历要执行的代码}
     item : 遍历数组的当前项
     index :  item 对应的下标
     origin : 对应的原数组
     作用: 判读数据里面   "是否有一项"   符合条件
     返回值:  一个布尔值
      true  最少有一项满足
      false  全都不满足                 
  • 代码解析
// 1.forEach
    var arr = [3, 5, 9, 12, 16, 7];
    var res = arr.forEach(function (item, index, origin) {
      console.log(item, index, origin);
    });
     //返回的是  每一项以及对应的值,而且还有原数组

// 2.map
    var arr = [3, 5, 9, 12, 16, 7];
    var res = arr.map(function (item, index, origin) {
      return item * 2;
    }); 
    console.log(res);// [3,10,18,24,32,14]  
    
// 3.filter 
    var arr = [3, 5, 9, 12, 16, 7];
    var res = arr.filter(function (item, index, origin) {
      return item % 2 == 0;  //过滤条件为 偶数
    });
    console.log(res);// 12  16 

// 4.find
    var arr = [1, 2, 3, 4, 5, 6, 7,]
    var res = arr.find(function (item, index, origin) {
      return item > 3;
    });
    console.log(res);// [4,5,6,7,] 查找到符合条件的项   

//  5.findIndex
    var arr = [1, 2, 3, 4, 5, 6, 7,]
    //         0  1  2  3  4  5  6 
    var res = arr.findIndex(function (item, index, origin) {
      return item % 3 === 0;
    });
    console.log(res);//  2    查找到符合条件的第一吃出现的索引

//  6. every
    var arr = [1, 2, 3, 4, 5, 6, 7,]
    //         0  1  2  3  4  5  6 
    var res = arr.every(function (item, index, origin) {
      // return item < 8;
      return item < 6;
    });
    // console.log(res);// true
    console.log(res); // false

// 7.some 
    var arr = [1, 2, 3, 4, 5, 6, 7,]
    //         0  1  2  3  4  5  6 
    var res = arr.some(function (item, index, origin) {
      // return item % 3 === 0; //数组中有符合条件的 也有不符合条件的
      return item % 8 === 0;
    });
    // console.log(res);// true
    console.log(res);// false 

字符串

  • 字面量的方式创建
    1. var str = 'QF001'
  • 内置构造函数
    1. var str1 = new String('QF001');
字符串方法
1.charAt
        语法: 字符串.chartAt(索引)
        作用: 找到字符串中这个索引对应的文本
        返回值: 查询到的值;如果没有找到,返回一个空字符串
2.charAtCodeAt
        语法: 字符串.charAtCodeAt(索引)
        作用: 找到字符串中这个索引对应的文本的  十进制编码
        返回值: 查询到的值对应的编码;如果没有找到,返回一个NaN
3.toLowerCase
        语法: 字符串.toLowerCase()
        作用: 将字符串全部转换为 小写
        返回值: 转换后的字符串
4.toUpperCase
        语法: 字符串.toUpperCase
        作用: 将字符串全部转换为  大写
        返回值: 转换后的字符串
代码解析
        var str = 'qf001'
        //         01234 
        var res = str.charAt(2);
        console.log(res); //0

小案例

        //得到 obj ={a:1;b:2,c:3,d:4}
        //   即  a 的次数为1 b 的次数为2 ...
        var str = 'abbcccdddd';
        //         0123456789
        //字符串也可以当成数组来看
        // 并且只能用for循环
        // var Asum = 0;
        // var Bsum = 0;
        // var Csum = 0;
        // var Dsum = 0;
        // var obj = {};
        // for (var i = 0; i < str.length; i++) {
        //     if (str[i] === 'a') {
        //         Asum++;
        //     }
        //     if (str[i] === 'b') {
        //         Bsum++;
        //     }
        //     if (str[i] === 'c') {
        //         Csum++;
        //     }
        //     if (str[i] === 'd') {
        //         Dsum++;
        //     }
        // }
        // obj.a = Asum;
        // obj.b = Bsum;
        // obj.c = Csum;
        // obj.d = Dsum;
        // console.log(obj);
        // console.log('a:',Asum);
        // console.log('b:',Bsum);
        // console.log('c:',Csum);
        // console.log('d:',Dsum);


        // 优化为:
        /*
           1.利用for循环
           2.str[0]='a' 
             obj = {} 有'a'
             放到增 到 obj 里面 有则 为1
             没有则 数量相加
            obj[str[0]] ==》 obj['a'] === undefined 代表没有
             (if else分支)判断没有'a'则为1
             否则 数量增加
            

        */
        for (var i = 0; i < str.length; i++) {
            if (obj[str[0]] === undefined) {
                obj[str[0]] = 1;
            } else {
                obj[str[0]]++;
            }
        }
        console.log(obj);