不使用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的封装方法,说来说去还是遍历,遍历通过的还是循环。