数组、字符串、数学函数

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('');
  }

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容