频道栏目
首页 > 程序开发 > web前端 > HTML/CSS > 正文
笔试编程题之数组求和
2017-09-13 09:33:00      个评论    来源:前端小王子  
收藏   我要投稿

题目描述

计算给定数组 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到了吗?

点击复制链接 与好友分享!回本站首页
上一篇:gulp自动化构建工具
下一篇:img.onload知识点归纳总结
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训

版权所有: 红黑联盟--致力于做实用的IT技术学习网站