不使用for遍历进行,叠加(递归,ES5实现),map、fill、reduce。 fill的灵魂体现。

不使用for遍历进行,叠加(递归,ES5实现)

实现addNum(num1, num2)方法, 接受两个参数, 分别是两个整数,求两个整数之间的所有整数之和

​ 例如: addNum(10, 20) 10+11+…+20 得到165

​ 可以包含两个参数, 可以不包含两个参数

​ 我们统一包含两个参数

不要使用for循环

法一: 使用递归

function addNum(one, two) {
    var sum = one;
    if (one < two) {
        return sum = sum + addNum(one + 1, two);
    } else if(one == two){
        return one;
    }
}

console.log(addNum(10, 20));  // 165

法二: 使用ES5 提供方法

方法:
					 fill: 生成数组
					 map: 映射数组
					 reduce: 累加


fill(val) 填充数组。 将数组中的所有元素都填充为 val。

map(function(value,index)) 返回值,作为新数组的元素。返回一个新数组。

reduce(function(prev, value, index)) 返回值为 ,回调函数的 return。

​ 参数: prev, 第一次为第一个元素。 从第二次开始为上一次的返回值

​ value 为遍历的值,从第二个元素开始

​ index 遍历的索引,从第二个元素开始

function addNum(num1, num2) {
    // 生成指定长度的数组
    var arr = new Array(num2 - num1 + 1);
    // 使用 ES5 中的  填充  num1  填充    num1 到  num2 步长是  1
    arr = arr.fill(num1);
    // console.log(arr);
    var brr = arr.map(function(value, index){
        // map 的特点  return  是map的新元素
        return value + index;
    });

    console.log(brr);  // 现在就得到数组了

    // 累加可以使用   reduce
    var sum = brr.reduce(function(prev, value, index){
        return prev + value;
    });
    return sum;
}

console.log(addNum(10, 20));  

这个地方, 有个体现出fill的灵魂应用。 通过new Array(数量), new出来的数组的 元素都是 empty。

​ empty是空位,不是数据类型。遍历的时候,是不会遍历到的。(for、forEach、for in、map等)

​ fill是填充数组,一直认为这个方法好像没有用,现在知道他的灵魂使用了。

实际上,ES5的封装方法,说来说去还是遍历,遍历通过的还是循环。

发布了7 篇原创文章 · 获赞 1 · 访问量 217

猜你喜欢

转载自blog.csdn.net/qq_35898059/article/details/103874228