您现在的位置:首页 >> 前端 >> 内容

笔试编程题之数组求和

时间:2017/9/13 9:33:00 点击:

  核心提示:题目描述计算给定数组 arr 中所有元素的总和输入描述:数组中的元素均为 Number 类型示例输入[ 1, 2, 3, 4 ]输出10注意(首先判断数组长度,这是很容易被大家遗忘的!!!)长度如果为...

题目描述

计算给定数组 arr 中所有元素的总和

输入描述:

数组中的元素均为 Number 类型

示例

输入

[ 1, 2, 3, 4 ]

输出

10

注意

(首先判断数组长度,这是很容易被大家遗忘的!!!)

长度如果为0,直接返回-1;

如果为1,直接返回arr[0]

如果大于1,就是接下来我们要讨论的内容

思路一

使用for循环遍历

function sum(arr) {
        var sum=0;
        if(arr.length==0){
            return 0;
        }else if (arr.length==1) {
            return arr[0];
        }else {
            for(var i=0;i

思路二

递归方法

很容易想到使用for循环来解决这个问题,那么你有没有考虑过用递归的方式呢?(不考虑算法的时间复杂度条件下)

function sum(arr){
        return arr[0]+sum(arr.slice(1));
}

这是使用到一个方法叫slice(),它的参数形式是slice(start,end),返回一个由下标start开始到end之间的新数组(不包括end),如果不指定end,则返回start到数组末尾(包括末尾)

思路三

使用eval

也许你对eval不熟悉或者很陌生,只是依稀记得很多书告诉我们最好别用eval,因为它会存在安全问题

但这并不妨碍我们使用它来解决这个问题

arr.join(‘+’)会返回一个字符串,链接符为“+”

eval()会解析一个字符串参数,并执行里面的js代码

function sum(arr){
    return eval(arr.join('+'));//返回一个字符串
}

思路四

使用forEach遍历数组

function sum1(arr){
    var result=0;
    arr.forEach( function(element) {
        result+=element;
    });
    return result;
}

forEach()需要传入一个回调函数

思路五

最后介绍一个比较冷门的方法,那就是reduce()

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

function sum(arr){
    arr.reduce(function(total,current){ 
        return total+current;
    })
}

total代表前面的数加起来的总数,current代表当前值

reduce会在每个数组项中调用回调函数

一个简简单单的数组求和居然有这么多种解决方式,你get到了吗?

作者:网络 来源:前端小王子