美文网首页
数组、字符串、数学函数

数组、字符串、数学函数

作者: 王康_Wang | 来源:发表于2016-08-01 19:51 被阅读0次

    1. 数组方法里poppushshiftunshiftjoinsplit 分别有什么作用?

    var arr = [3, 5, 6, 3, 8, 3, 9] 
    

    i. pop的作用是删除数组的最后一个元素

    arr.pop () // [3, 5, 6, 3, 8, 3]

    
    ii.``` push```的作用是在数组最后添加一个元素
    - ```
    arr.push (10)    // [3, 5, 6, 3, 8, 3, 9, 10]
    

    iii.shift的作用是在删除数组的第一个元素

    arr.shift () // [5, 6, 3, 8, 3, 9]

    
    iv.```unshift```的作用是在数组的最前面添加一个元素
    - ```
    arr.unshift (12)    // [12, 3, 5, 6, 3, 8, 3, 9]
    

    v.join方法的作用是将数组使用参数作为连接符链接成一个字符串,不会修改原数组的内容

    arr.join ( '-' ) // '3-5-6-3-8-3-9'

    
    vi.```split```方法可以用来增加、删除、插入或修改数组中的元素
    - ```
    var arr = [1, 5, 7, 3, 21, 32]
    
    • 删除
    arr. splice (1, 2)    // [1, 3, 21, 32] ```
    - 添加
    

    arr. splice (2, 0, 8, 9) // [1, 5, 8, 9, 7, 3, 21, 32]```

    • 插入/修改
    arr. splice (2, 0, 5, 4)    // [1, 5, 5, 4, 7, 3, 21, 32]
    
    arr. splice (2, 3, 6, 7)    // [1, 5, 6, 7, 32]
    

    代码题

    * <u>数组</u> *

    1. 用splice实现poppushshiftunshift方法

    代码链接

    • // pop 方法 ---------------------
      var arr1 = [2, 6, 2, 8, 4, 9];
      function pop(arr) {
        var a = arr[arr.length-1]
        arr.splice (arr.length-1, 1);
        return a;
      }
      
      // push 方法 ---------------------
      var arr2 = [2, 6, 2, 8, 4, 9];
      function push(arr, val) {
        arr.splice (arr.length, 0, val);
        return arr.length;
      }
      
      // shift 方法 ---------------------
      var arr3 = [2, 6, 2, 8, 4, 9];
      function shift(arr) {
        arr.splice (0,1);
        return arr(0);
      }
      
      // unshift 方法 ---------------------
      var arr4 = [2, 6, 2, 8, 4, 9];
      function unshift(arr, val) {
        arr.splice (0,0,val);
        return arr.length;
      }
      
    
    ###2. 使用数组拼接出如下字符串:
    [代码链接](http://book.jirengu.com/jirengu-inc/jrg-vip9/members/%E7%8E%8B%E5%BA%B7/%E4%BB%BB%E5%8A%A1%E5%8D%81%E5%85%AB%EF%BC%9A%E6%95%B0%E7%BB%84%E3%80%81%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/task18-2%E6%95%B0%E7%BB%84.html)
    - ```
      var prod = {
        name: '女装',
        styles: ['短款', '冬季', '春装']
      };
    
      function getTpl(data){
        var tp1 = '<dl class="product">';
        tp1 += '<dt>' + data.name + '</dt>';
        for (var i = 0; i < data.styles.length; i++) {
          tp1 += '<dd>' + data.styles[i] + '</dd>';
        }
        tp1 += '</dl>';
        return tp1;
      };
    
      var result = getTpl(prod);
      console.log (result);
    

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

    代码链接

    • var arr = [ "test", 2, 1.5, false ]
      function find(arr,val) {
        for (var i=0; i<arr.length; i++) {
          if (arr[i] === val) {
            var a = i;
          };
        }
        var b = a != undefined ? a : -1;
        return b
      }
      find(arr, "test") // 0
      find(arr, 2) // 1
      find(arr, 0) // -11
      
    
    ###4. 写一个函数```filterNumeric```,把数组 ```arr```中的数字过滤出来赋值给新数组```newarr```, 原数组```arr```不变
    [代码链接](http://book.jirengu.com/jirengu-inc/jrg-vip9/members/%E7%8E%8B%E5%BA%B7/%E4%BB%BB%E5%8A%A1%E5%8D%81%E5%85%AB%EF%BC%9A%E6%95%B0%E7%BB%84%E3%80%81%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/task18-4%E6%95%B0%E7%BB%84.html)
    - ```
      var arr = ["a", "b", 1, 3, 5, "b", 2];
      function filterNumeric(arr) {
        var newarr = [];
        for (var i=0; i<arr.length; i++) {
          if (typeof arr[i] === 'number') {
            newarr.push(arr[i]);
          };
        };
        return newarr;
      }
      newarr = filterNumeric(arr);  //   [1,3,5,2]
    

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

    代码链接

    • var obj = {
        className: 'open menu'
      }
      
      // 定义函数 addClass(obj,str) ------------------------------------------
      function addClass(obj,str) {
        var a = true;
        var b, c;
        var arr = (obj.className).split(' ');   // 将字符串转化为数组
      
        for (var i=0; i<arr.length;i++) {       // 遍历数组arr,判断数组中是否有与str相同的元素
          if (arr[i] === str) {
            a = false;                          // 若存在,a改为false
          };
        };
        arr.push(str);                          // 将str添加到数组arr最后
      
        b = str + '不存在,所以' + 'obj.className变为' + '\'' + arr.join(' ') + '\'';
        c = '因为'+ str + '已经存在,所以不会再次添加' + str;
      
        if (a) {
          obj.className = arr.join(' ');
          return b;
        } else {
          return c;
        }
      }
      
      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,str) ---------------------------------------
      function removeClass(obj,str) {
        var a = false;
        var b, c, d;
        var arr = (obj.className).split(' ');   // 将字符串转化为数组
        for (var i=0; i<arr.length;i++) {       // 遍历数组,判断arr中是否存在与str相同的元素
          if (arr[i] === str) {
            a = true;                           // 如果存在相同元素,a变为true
            arr.splice (i, 1)                   // 在arr中将相同的元素删除
          };
        };
      
        b = arr.join(' ');
        c = '去掉obj.className里面的' + str + ',变成' + '\'' + b + '\'';
        d = '因为' + str + '不存在,所以此操作无任何影响';
      
        if (a) {
          obj.className = b;
          return c;
        } else {
          return d
        }
      }
      removeClass(obj, 'open') // 去掉obj.className里面的 open,变成'menu new me'
      removeClass(obj, 'blabla')  // 因为blabla不存在,所以此操作无任何影响
      
    
    ###6. 写一个```camelize```函数,把```my-short-string```形式的字符串转化成```myShortString```形式的字符串,如
    [代码链接](http://book.jirengu.com/jirengu-inc/jrg-vip9/members/%E7%8E%8B%E5%BA%B7/%E4%BB%BB%E5%8A%A1%E5%8D%81%E5%85%AB%EF%BC%9A%E6%95%B0%E7%BB%84%E3%80%81%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/task18-6%E6%95%B0%E7%BB%84.html)
    - ```
      function camelize(str) {
        var arr = str.split('-');
        if (arr.length < 2) {
          return;
        }
        for (var i = 1; i < arr.length; i++) {
          arr[i] = arr[i].replace(arr[i][0], arr[i][0].toUpperCase());
        }
        return arr.join('');
      }
    

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

    代码链接

    •     arr = ["a", "b"];
          arr.push( function() { alert(console.log('hello hunger valley')) } );
          // 此时arr变为["a","b",function(){...}]
          arr[arr.length-1]()  
          // 调用函数,故输出'hello hunger valley',弹窗undefined
      
    
    ###8. 写一个函数```filterNumericInPlace```,过滤数组中的数字,删除非数字。要求在原数组上操作
    [代码链接](http://book.jirengu.com/jirengu-inc/jrg-vip9/members/%E7%8E%8B%E5%BA%B7/%E4%BB%BB%E5%8A%A1%E5%8D%81%E5%85%AB%EF%BC%9A%E6%95%B0%E7%BB%84%E3%80%81%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/task18-8%E6%95%B0%E7%BB%84.html)
    - ```
      arr = ["a", "b", 1, 3, 4, 5, "b", 2];
      //对原数组进行操作,不需要返回值
      function filterNumericInPlace(arr) {
        for (var i = arr.length-1; i>=0; i--) {   // 因为是在原数组上操作,所以如果递增,会出现改变未经判断的元素的索引号,导致漏删,倒数递减则会避免这种情况
          if (typeof(arr[i]) != 'number') {
            arr.splice (i,1);
          }
        }
      }
      filterNumericInPlace(arr);
      console.log(arr)  // [1,3,4,5,2]
    

    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(a, b){return a.age - b.age;});
      }
      /*
      function ageSort(arr) {
        arr.sort(
          function(p1,p2) {
            return p1.age > p2.age;
          }
        )
      }
      */
      ageSort(people) // [ bob, mary, john ]
      
    
    ###10. 写一个```filter(arr, func)```函数用于过滤数组,接受两个参数,第一个是要处理的数组,第二个参数是回调函数(回调函数遍历接受每一个数组元素,当函数返回```true```时保留该元素,否则删除该元素)。实现如下功能:
    [代码链接](http://book.jirengu.com/jirengu-inc/jrg-vip9/members/%E7%8E%8B%E5%BA%B7/%E4%BB%BB%E5%8A%A1%E5%8D%81%E5%85%AB%EF%BC%9A%E6%95%B0%E7%BB%84%E3%80%81%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/task18-10%E6%95%B0%E7%BB%84.html) 
    - ```
      function isNumeric (el){
          return typeof el === 'number';
      }
      arr = ["a",3,4,true, -1, 2, "b"]
      function filter(arr,func) {
        for (var i = arr.length-1; i>=0; i--) {
          if (func(arr[i]) === false) {
            arr.splice(i,1);
          };
        };
        return arr;
      }
      arr = filter(arr, isNumeric) ; // arr = [3,4,-1, 2],  过滤出数字
      arr = filter(arr, function(val) { return  typeof val === "number" && val > 0 });  // arr = [3,4,2] 过滤出大于0的整数
    

    * <u>字符串</u> *

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

    代码链接

    • function ucFirst(str) {
        var arr = str.split('');
        arr[0] = arr[0].toUpperCase();
        return arr.join('');
      }
      ucFirst("hunger")   // "Hunger"
      
    
    ###12. 写一个函数```truncate(str, maxlength)```, 如果```str```的长度大于```maxlength```,会把```str```截断到```maxlength````长,并加上...,如:
    [代码链接](http://book.jirengu.com/jirengu-inc/jrg-vip9/members/%E7%8E%8B%E5%BA%B7/%E4%BB%BB%E5%8A%A1%E5%8D%81%E5%85%AB%EF%BC%9A%E6%95%B0%E7%BB%84%E3%80%81%E5%AD%97%E7%AC%A6%E4%B8%B2%E3%80%81%E6%95%B0%E5%AD%A6%E5%87%BD%E6%95%B0/task18-12%E5%AD%97%E7%AC%A6%E4%B8%B2.html)
    - ```
      function truncate(str,num) {
        var arr = str.split('');
        if (arr.length > num) {
          arr.length = num;
          arr[arr.length-1] = arr[arr.length-1] + '...';
          return arr.join('');
        } else {
          return str;
        }
      }
      // truncate("hello, this is hunger valley,", 10) == "hello, thi...";
      // truncate("hello world", 20)) == "hello world"
    

    * <u>数学函数</u> *

    代码链接

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

    • function randomNumber1(min,max) {
        return parseInt(Math.random()*(max-min)+min);
      }
      
    
    ###14. 写一个函数,获取从min都max之间的随机整数,包括min包括max
    - ```
      function randomNumber2(min,max) {
        return parseInt(Math.random()*(max-min+1)+min);
      }
    

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

    • function randomArr(min,max,len) {
        var arr = [];
        for (var i=0; i<len; i++) {
          arr[i] = randomNumber2(min,max);
        }
        return arr;
      }
      
    
    ###16. 写一个函数,生成一个长度为 n 的随机字符串,字符串字符的取值范围包括0到9,a到 z,A到Z。
    - ```
      var DataRange = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
      function getRandStr (len) {
        var arr = [];
        var n;
        for (var i=0; i<len; i++) {
          n = parseInt(Math.random()*62);
          arr[i] = DataRange[n];
        }
        return arr.join('');
      }
    

    本教程版权归本人和饥人谷所有,转载请注明来源。

    相关文章

      网友评论

          本文标题:数组、字符串、数学函数

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