斐波那契数列要求当前数是前两个数之和的一种排序这一题比较有意思,需要使用生成器函数来完成,生成器函数具有以下特性:基于迭代器协议运作生成器函数不会马上执行,而是等待迭代指令函数内部的执行流程将根据yield关键字往下走,无视函数内部原有的执行流程/** * const gen = fibGenerator(); * gen.next().value; // 0 * gen.next().value; // 1 */题目要求这个数列的前几个数字是 0, 1, 1, 2, 3, 5, 8, 13最后一个数≤50题解var fibGenerator = function* () { let [a, b] = [0, 1]; yield a; //第一次先返回1 while (true) { [a, b] = [b, a + b]; //每次调用都让B的值进行求和,A的值取上一次求和后的B值 if (a <= 50) yield a; //要求2 } }; let p1 = fibGenerator(); console.log(p1.nex
这一题要求实现一个Compose函数,属于高阶函数中的一种应用,比它更复杂一些的就是函数柯里化啦~要求第一次调用时接收的是一个函数数组返回一个新的函数,并且这个函数就是函数数组的复合函数/** * const fn = compose([x => x + 1, x => 2 * x]) * fn(4) // 9 */题解这里不使用Reduce方法,采用原始循环来解var compose = function (functions) { return function (x) { for (let i = functions.length - 1; i >= 0; i--) { x = functions[i](x); } return x; }; };
这一题要求我们模拟实现类似Reduce的效果要求不使用数组下的Reduce方法长度为0的情况下返回init值应用操作val = fn(init,nums[n])、val = fn(val,nums[n])题解var reduce = function (nums, fn, init) { if (!nums.length) return init; //满足条件2 let initRes = init; nums.forEach((num) => (initRes = fn(initRes, num))); return initRes; };
Harexs
风归云动,天河泻梦