笔试编程题之数组求和

来源:互联网 发布:centos升级kde 编辑:程序博客网 时间:2024/06/11 13:28

题目描述

计算给定数组 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<arr.length;i++){            sum=sum+arr[i];        }           }        return sum;}

思路二

递归方法

很容易想到使用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到了吗?

原创粉丝点击