• 前段笔试(转载)


    (1) 将多维数组转化成一个一位数组,例如[1,[2,3],[4,5,[6,7]]]转化成[1,2,3,4,5,6,7]

    思路:先用join方法转换回字符串

    [1,[2,3],[4,5,[6,7]]].join(',')  //"1,2,3,4,5,6,7"

    再把字符串转换成字符串数组

    [1,[2,3],[4,5,[6,7]]].join(',').split(",")//["1", "2", "3", "4", "5", "6", "7"]

    把字符串数组转化为新的数组

    [1,[2,3],[4,5,[6,7]]].join(',').split(',').map(function(i){return i|0 ;})
    [1,[2,3],[4,5,[6,7]]].join(',').split(',').map(function(i){return +i ;})
    //[1, 2, 3, 4, 5, 6, 7]

    在这里来i|0相当于+i,就是把字符串转化为数字,比如

    console.log(“1"|0);//1
    console.log("1000"|0);//1000

    注意js中一些隐式的转换

    x+""相当于String(x)
    
    +x相当于Number(x)
    !!x相当于Boolean(x)

    顺便来学习js中map的用法

    这里的map不是“地图”的意思,而是指“映射”。[].map(); 基本用法跟forEach方法类似:

    array.map(callback,[thisObject]);

    callback的参数也类似:

    [].map(function(value, index, array) {
        // ...
    });

    map方法的作用不难理解,“映射”嘛,也就是原数组被“映射”成对应新数组。下面这个例子是数值项求平方:

    var data = [1, 2, 3, 4];
    
    var arrayOfSquares = data.map(function (item) {
      return item * item;
    });
    
    alert(arrayOfSquares); // 1, 4, 9, 16

    callback需要有return值,如果没有,就像下面这样:

    var data = [1, 2, 3, 4];
    var arrayOfSquares = data.map(function() {});
    
    arrayOfSquares.forEach(console.log);

    结果如下图,可以看到,数组所有项都被映射成了undefined

    在实际使用的时候,我们可以利用map方法方便获得对象数组中的特定属性值们。例如下面这个例子(之后的兼容demo也是该例子):

    var users = [
      {name: "张含韵", "email": "zhang@email.com"},
      {name: "江一燕",   "email": "jiang@email.com"},
      {name: "李小璐",  "email": "li@email.com"}
    ];
    
    var emails = users.map(function (user) { return user.email; });
    
    console.log(emails.join(", ")); // zhang@email.com, jiang@email.com, li@email.com

    Array.prototype扩展可以让IE6-IE8浏览器也支持map方法:

    if (typeof Array.prototype.map != "function") {
      Array.prototype.map = function (fn, context) {
        var arr = [];
        if (typeof fn === "function") {
          for (var k = 0, length = this.length; k < length; k++) {      
             arr.push(fn.call(context, this[k], k, this));
          }
        }
        return arr;
      };
    }

     (2) 求数组的最大维数,即一共嵌套了多少层,例如[1,2,[3,[4,5,[6]],[7,[8]]]] 一共嵌套了4层,还是利用递归,主要代码在下面

    var a=[1,2,[3,[4,5,[6]],[7,[8]]]];
    function GetArrayDeep(arr){
        var deep=[];
        for(var i=0,length=arr.length;i<length;i++){
            if(arr[i] instanceof Array){
              deep[i]=arguments.callee(arr[i])+1;//如果是数组,维数加1,相当于下一层的维数+1
            }
          else{
            deep[i]=1;
          }
          
        }
      console.log(deep);
      return deep.sort(function(a,b){return a-b;}).pop();//从底层开始,返回每层最大的维数
     //return Math.max.apply(null,deep);
    }
    console.log(GetArrayDeep(a));
    //

    [1]
    [1, 1, 2]
    [1]
    [1, 2]
    [1, 3, 3]
    [1, 1, 4]
    4

    
    

     (3)查找字符串中出现最多的字符和个数?   例如:sdjksfssscfssdd  -> 字符最多的是s,出现了7次,这个主要就是利用replace函数来实现的,还可以用普通的方式

    var str = "sdjksfssscfssdd";
    str = str.split("").sort().join("");
    var count = 0;
    var val;
    str.replace(/(w)1/g,function(arg0,arg1){
        if(arg0.length > count){
          count = arg0.length;
          val = arg1;
        }
    });    
    console.log(val+" 出现了"+count+" 次");
  • 相关阅读:
    AntD 学习到的小技巧
    AntD 组件总结
    React 类组件的一些基本概念
    Angular 双向绑定的二三事
    node开发中通过命令行切换环境
    我使用的高德地图API
    设置cookie和获取cookie
    纯js事件注册方法(解决兼容性)
    选择器nth-child与nth-of-type之间的异同点
    怎么使用百度分享
  • 原文地址:https://www.cnblogs.com/yhf286/p/4885463.html
Copyright © 2020-2023  润新知