第一种eval()+join()

eval() 函数计算或执行参数。

如果参数是表达式,则 eval() 计算表达式。如果参数是一个或多个 JavaScript 语句,则 eval() 执行这些语句。

join() 方法用于把数组中的所有元素转换一个字符串。

元素是通过指定的分隔符进行分隔的。

这个方法的思路就是把数组转化为一个字符串表达式然后使用eval()方法求和

function sum(arr) {
    return eval(arr.join('+')) 
}

第二种for循环

function sum(arr) {
    let num = 0;
    for(let i=0;i<arr.length;i++){
        num = num+arr[i]
    }
    return num;
}

第三种foreach()

forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。

forEach(): 没有返回值,本质上等同于 for 循环,对每一项执行 function 函数。即map是返回一个新数组,原数组不变,forEach 是不改变原数组(尽管回调函数 callbackFn 在被调用时可能会改变原数组)。

不支持 continue,用 return false 或 return true 代替。

不支持 break,用 try catch/every/some 代替。

function sum(arr) {
    let s = 0;
    arr.forEach(item => s += item);
    return s;
}

第四种for in(常用于循环对象而且还是对象的属性)

for/in 语句用于循环对象属性。

循环中的代码每执行一次,就会对数组的元素或者对象的属性进行一次操作。

function sum(arr) {
    let s = 0;
    for(let i in arr) {
        s += arr[i];
    }
    return s;
}

第五种 for of(常用于循环对象,但是这个是循环对象的值)

  • for/of - 循环遍历可迭代对象的值
function sum(arr) {
    let s = 0;
    for(let i of arr) {
        s += i;
    }
    return s;
}

第六种 reduce()

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

reduce() 可以作为一个高阶函数,用于函数的 compose。

function sum(arr) {
    return arr.reduce((x, y) => x+y);
}