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)

【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

【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 ])

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 ])

3.forEach遍历:

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

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

5.eval()方法

语法:eval(string)

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

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

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
 

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

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

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

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 }
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))

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

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

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

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

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);

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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值