• Math 对象+JS数组求和的常用方法+ indexOf+js计算数组中每个元素出现的次数+while循环语句死循环


    Math 对象用于执行数学任务。
    Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数new Math()
    Math是静态对象,因此始终用作Math.方法,而不是用作创建new Math对象((动态)实例方法)的方法。

    【1】Math.random() 获取一个随机数,默认取值为[0, 1)的浮点数

         Math.random() // 范围是[0, 1)
         Math.random()*30 // 范围是[0, 30)
         Math.random()*30+1 // 范围是[1, 31)
    
    • 1
    • 2
    • 3

    【2】Math.round(值) 四舍五入得到一个整数
    【3】Math.ceil(值) 向上取整
    【4】Math.floor(值) 向下取整
    【5】Math.pow(底数,指数) 即底数的几次方

    底数**指数 或 Math.pow(底数,指数)
    console.log(Math.pow(10,2)); //100
    console.log(10**3); //1000
    
    • 1
    • 2
    • 3

    【6】Math.sqrt(值) 开平方
    【7】Math.max(值) 返回最大值
    【8】Math.min(值) 返回最小值
    【9】Math.abs(值) 取绝对值
    【10】Math.PI 得到一个圆周率 3.141592653589793
    【11】.Math.log()方法返回一个数的自然对数(以e为底)。
    【12】.Math.acos()方法返回数字的反余弦(以弧度为单位),其值介于0和PI弧度之间。

    JS数组求和的常用方法总结,6种方法

    1. 不考虑算法复杂度,用递归做:
    function sum(arr) {
      var len = arr.length;
      if(len == 0){
        return 0;
      } else if (len == 1){
        return arr[0];
      } else {
        return arr[0] + sum(arr.slice(1));
      }
    }
    sum([ 1, 2, 3, 4 ])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.常规循环:

    function sum(arr) {
      var s = 0;
      for (var i=arr.length-1; i>=0; i--) {
        s += arr[i];
      }
      return s;
    }
    sum([ 1, 2, 3, 4 ])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    3.forEach遍历:

    function sum(arr) {
      var s = 0;
      arr.forEach(function(val, idx, arr) {
        s += val;
      });
      return s;
     sum([ 1, 2, 3, 4 ]) 
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4.函数式编程reduce

          function sum(arr) {
            return arr.reduce(function (pre, value) {
              return pre + value;
            });
          }
          var arr = [1, 2, 3, 4];
          console.log(sum(arr)); // 10
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5.eval()方法

    语法:eval(string)
    
    • 1

    eval是JS中最强大的方法之一,它就像一个完整的ECMAScript解析器,它会根据ECMAScript语句对字符串进行解析和计算。

          function sum(arr) {
            return eval(arr.join("+"));
          }
          var arr = [1, 2, 3, 4];
          console.log(sum(arr)); // 10
    
    • 1
    • 2
    • 3
    • 4
    • 5

    6.通过原型对象扩展内置对象方法(即给Array增加方法)

          Array.prototype.sum = function () {
            var sum = 0;
            for (var i = 0; i < this.length; i++) {
              sum += this[i];
            }
            return sum;
          };
          var arr = [1, 2, 3, 4];
          console.log(arr.sum()); // 10
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    JavaScript 获取数组元素索引方法
    indexOf(数组元素) 作用就是返回该数组元素的索引号 ,从前面开始查找
    1.它只返回第一个满足条件的索引号
    2.它如果在该数组里面找不到元素,则返回的是 -1

    charAt() 方法可返回指定位置的字符。

    //index必需。表示字符串中某个位置的数字,即字符在字符串中的下标。
    语法:stringObject.charAt(index)
    
    • 1
    • 2

    js计算数组中每个元素出现的次数:(2种方法)

    var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
    var countedNames = names.reduce((obj, name) => { 
      if (name in obj) {
        obj[name]++
      } else {
        obj[name]=1
      }
      return obj
    }, {})
    //reduce的第二个参数就是obj的初始值
    console.log(countedNames)
    // { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    function getEleNums(data) {
     var map = {}
     for (i = 0; i < data.length; i++) {
         var key = data[i]
         if (map[key]) {
             map[key] += 1
         } else {
             map[key] = 1
         }
     }
     return map
    }
    var data = ['b','a','c','a','b','b','b','c','c','a','c','a','a','a','b','c']
    console.log(getEleNums(data))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    while循环语句和if条件语句:

    var c=5
    while (c>2) {
      console.log(8); //1个8 因为第一次就break
      c--
      break;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    var c=5
    while (c>2) {
      console.log(8); //3个8 因为等条件为false时自动结束循环
      c--
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    var c=5
    while (c>2) {
      console.log(8); //3个8 
      c--
     continue
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
     while (sum==idsum&&index<id-1) {
                 repeatnum++
                 break  //这要是不加break,上面的条件就会一直是true,死循环导致浏览器崩了
             }  
    
    • 1
    • 2
    • 3
    • 4
     while (sum==idsum&&index<id-1) {
                 repeatnum++
                 continue//用continue会死循环导致浏览器崩了,因为continue结束本次循环语句,进入下一次循环,下次循环还是true
             }  
    
    • 1
    • 2
    • 3
    • 4

    不止是while要注意break/continue的使用,其他循环语句比如ror循环(if条件语句是不允许也不需要break/continue)同样要注意break/continue的使用,break跳出当前整个循环语句,不再执行后面的循环。而continue结束本次循环语句,进入下一次循环

      let a=5
            while (a>2) {  
                console.log(55); //55   只会执行一次,因为执行完第一次循环就break跳出循环了
                a--
                break
            }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    do/while:循环至少执行一次,即便条件为 false,因为代码块是在条件语句判断前执行
    do…while 循环是 while 循环的变体。在检查while()条件是否为真之前,该循环首先会执行一次do{}之内的语句,然后在while()内检查条件是否为真,如果条件为真的话,就会重复do…while这个循环,直至while()为假。

      let a=5
           do {
               a--
               console.log(555);  //3次555
           } while (a>2);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
      let a=5
       do {
               a--
               console.log(555);  //1次555
             break
           } while (a>2);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注:while是循环语句,像for;而if语句是纯条件语句,条件判断时用if,虽然while有时也可以充当条件语句去判断,但是不符合编程逻辑。(区别:if条件语句会且只会执行一次,while循环可以不执行,也可以执行1次或者多次)

  • 相关阅读:
    机器学习笔记 - 使用具有triplet loss的孪生网络进行图像相似度估计
    MTK Logo 逆向解析之 rawx 全解压
    KKVIEW远程控制: 远程控制APP下载
    磁盘存储链式的B树与B+树
    Servlet原理及Mapping问题的体现
    android系统定制三:Dialer禁止系统拉起来去电页面(InCallActivity);
    P251——用RadialGradientBrush填充椭圆,并进行RotateTransform变换
    HTC官方RUU固件提取刷机包rom.zip以及RUU解密教程
    15 | Linux系统上安装python
    UE4 顶点网格动画播放后渲染模糊问题
  • 原文地址:https://blog.csdn.net/m0_52669454/article/details/126679439