美文网首页
任务18 数组-字符串-数学函数-代码题

任务18 数组-字符串-数学函数-代码题

作者: GarenWang | 来源:发表于2016-11-13 03:53 被阅读0次

    数组

    1.用 splice 实现 push、pop、shift、unshift 方法

    • push方法
      function push(arr,val){
      arr.splice(arr.length,0,val);
      console.log(arr)
      return arr.length;
      }

    • pop方法

            function pop(arr){
                return  arr.splice(arr.length-1,1)[0];  
            }
      
    • shift方法
      function shift(arr){
      return arr.splice(0,1)[0]
      }

    • unshift方法

            function unshift(arr,val){
            return arr.splice(0,0,val)[0]
        }
      

    2.使用数组拼接出如下字符串

       var prod = { name: '女装', 
                styles: ['短款', '冬季', '春装']
            };
          function getTpl(data){//todo...};
          var result = getTplStr(prod); //result为下面的字符串
        <dl class="product">
         <dt>女装</dt>
         <dd>短款</dd> 
        <dd>冬季</dd>
       <dd>春装</dd>
        </dl>
    

    方法如下:

        var prod = {
            name: '女装',
            styles: ['短款', '冬季', '春装']
      };
          function getTpl(data){
            var tpl='<dl class="product">'
            tpl+='<dt>'+data.name+'</dt>';
            for(var i=0;i<prod.styles.length;i++){
        tpl+='<dd>'+prod.styles[i]+'</dd>'
          }
          tpl+='</dl>';
          return tpl;
          }
    

    3.写一个find函数,实现下面的功能

        var arr = [ "test", 2, 1.5, false ]
        find(arr, "test") // 0
        find(arr, 2) // 1
        find(arr, 0) // -1
    

    函数如下:

      function find(arr,val){
       return arr.indexOf(val)
    }
    

    4.写一个函数filterNumeric,把数组 arr 中的数字过滤出来赋值给新数组newarr, 原数组arr不变

        arr = ["a", "b", 1, 3, 5, "b", 2];
        newarr = filterNumeric(arr);  //   [1,3,5,2]
    

    函数如下:

        arr = ["a", "b", 1, 3, 5, "b", 2];
        newarr = filterNumeric(arr);  //   [1,3,5,2]
        function filterNumeric(arr){
            var newarr=[];
          for(var i=0;i<arr.length;i++){
            if (typeof arr[i]==="number"){
             newarr.push(arr[i]);
          }
        }
    console.log(newarr);
      }
    

    5.对象obj有个className属性,里面的值为空格分割的字符串(和html元素的class特性类似),写addClass、removeClass函数,有如下功能

          var obj = {
        className: 'open menu'
          }
          addClass(obj, 'new') // obj.className='open menu new'
          addClass(obj, 'open')  // 因为open已经存在,所以不会再次    添加open
          addClass(obj, 'me') // me不存在,所以 obj.className变          为'open menu new me'
          console.log(obj.className)  // "open menu new me"
          removeClass(obj, 'open') // 去掉obj.className里面的 open,变成'menu new me'
          removeClass(obj, 'blabla')  // 因为blabla不存在,所以此操作无任何影响
    

    函数如下:

        function addClass(obj,name){
    var classArr=obj.className.split(' ');
    for(var i=0;i<classArr.length;i++){
        if (name===classArr[i]) {
            return;
          }
        }
      obj.className+=' '+name
        }
        function removeClass(obj,name){
    var classArr=obj.className.split(' ')
        for(var i=0;i<classArr.length;i++){
        if (name===classArr[i]) {
            classArr.split(i,1);
            i--;
          }
        }
      obj.className=classArr.join(' ');
        }
    

    6.写一个camelize函数,把my-short-string形式的字符串转化成myShortString形式的字符串

      camelize("background-color")=='backgroundColor'
      camelize("list-style-image") == 'listStyleImage'
    

    函数如下:

        function camelize(str){
            var arr=str.split('-');//将str字符串转化为数组["background",color]
            if(arr.length===1) {return str};
            for(var i=1;i<arr.length;i++){
        arr[i]=arr[i][0].toUpperCase()+arr[i].substr(1);
        }
    return arr.join('')//数组在转化成字符串
        } ;
    

    7.如下代码输出什么?为什么?

    arr = ["a", "b"];
    arr.push( function() { alert(console.log('hello hunger valley')) } );
    arr[arr.length-1]() // ?
    

    原因:
    1.最开始 数组arr = ["a", "b"];有两个元素,
    2.执行到第二步arr.push( function() { alert(console.log('hello hunger valley')) } );把整个函数添加到数组里,数组变成了arr = ["a", "b",function() { alert(console.log('hello hunger valley'))];

    1. arr[arr.length-1]()就变成了arr[2](),也就是变成了执行了匿名函数function() { alert(console.log('hello hunger valley'))()
    2. 执行结果在弹窗中出现undefined,这是因为alert()只能输出字符串,而题目中alert()里的是命令。接着在控制台打印出'hello hunger valley'的字符串,这是因为执行了console.log(‘hello hunger valley’)的命令。

    8.写一个函数isPalindrome,判断一个字符串是不是回文字符串(正读和反读一样,比如 abcdcba 是回文字符串, abcdefg不是)

    函数如下:

        function isPalindrome(str){
        var arr=str.split("");//转化为数组处理
          return arr.every(function(e,i,arrr){
        return e===arrr.[arrr.length-i-1];
          }) 
        }
    

    9.写一个ageSort函数实现数组中对象按age从小到大排序

          var john = { name: "John Smith", age: 23 }
          var mary = { name: "Mary Key", age: 18 }
          var bob = { name: "Bob-small", age: 6 }
          var people = [ john, mary, bob ]
          function ageSort(arr){
            arr.sort(function(p1,p2){
        return p1.age>p2.age
            })
          return arr;
            }
          ageSort(people); // [ bob, mary, john ]
    

    10.写一个filter(arr, func) 函数用于过滤数组,接受两个参数,第一个是要处理的数组,第二个参数是回调函数(回调函数遍历接受每一个数组元素,当函数返回true时保留该元素,否则删除该元素)。实现如下功能:

        arr = ["a",3,4,true, -1, 2, "b"]
          function isNumeric (el){
                  return typeof el === 'number'; 
        }
            function filter(arr, func){
                  return arr.filter(func);
            }
    

    函数如下:

         function filter(arr,func){
            for(var i=arr.length-1;i>=0;i--){
            if(!func(arr[i])){
                arr.splice(i,1);
                };
            };
                };
            filter(arr,function(val){
                return typeof val==="number"
                });
              filter(arr,function(val){
              return typeof val==="number"&&val>0;
                });
              filter(arr,function(val){
                  return typeof val==="string";
                  });
    

    字符串

    1.写一个 ucFirst函数,返回第一个字母为大写的字符

        function ucFirst(str){
        if(typeof str==="string"){
            return str[0].toUpperCase()+str.substr(1);
          }
        }
    ucFirst("hunger")//"Hunger"
    

    2.写一个函数truncate(str, maxlength), 如果str的长度大于maxlength,会把str截断到maxlength长,并加上…,如

          function truncate(str,maxlength){
         return str.length<=maxlength? str:                     str.substr(0,maxlength)+"..."    
        }      
    

    数学函数

    1.写一个函数,获取从min到max之间的随机整数,包括min不包括max

        function rand(min,max){
        return Math.floor((Math.random())*(max-min))+min
    }  
    

    2.写一个函数,获取从min都max之间的随机整数,包括min包括max

        function rand(min,max){
        return Math.floor((Math.random())*(max-  min+1))+min
    }  
    

    3.写一个函数,获取一个随机数组,数组中元素长度为len,最小值为min,最大值为max(包括)的随机整数

       function randArr(len,min,max){
        var arr=[];
        arr.push(min);
        arr.push(max);
        var randVal;
        for(var i=0;i<len-2;i++){
         randVal=min+Math.floor(Math.random()*(max-min+1));
         arr.push(randVal);
        }
        return arr;
    } 
    

    4.写一个函数,生成一个长度为 n 的随机字符串,字符串字符的取值范围包括0到9,a到 z,A到Z

       var str="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
        function getRandom(n){
            var arr=[];
              for(var i=0;i<n;n++){
                   arr[i]=str[Math.floor(Math.random()*str.length)]
        }
        return arr.join('');
    }

    相关文章

      网友评论

          本文标题:任务18 数组-字符串-数学函数-代码题

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