笔试编程题之数组求和
思路二
递归方法
很容易想到使用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到了吗?
来源: https://www.2cto.com/kf/201709/680114.html