前言:锻炼自己的思想,规范自己的编程思路。每天一道算法题,督促自己。
靡不有初,鲜克有终,加油坚持下去。
问题:请你编写一个函数,它的参数为一个整数数组 nums 、一个计算函数 fn 和初始值 init 。返回一个数组 归约后 的值。
你可以定义一个数组 归约后 的值,然后应用以下操作: val = fn(init, nums[0]) , val = fn(val, nums[1]) , val = fn(val, arr[2]) ,... 直到数组中的每个元素都被处理完毕。返回 val 的最终值。
如果数组的长度为 0,它应该返回 init 的值。
请你在不使用内置数组方法的 Array.reduce 前提下解决这个问题。
示例:
输入:
nums = [1,2,3,4]
fn = function sum(accum, curr) { return accum + curr; }
init = 0
输出:10
解释:
初始值为 init=0 。
(0) + nums[0] = 1
(1) + nums[1] = 3
(3) + nums[2] = 6
(6) + nums[3] = 10
Val 最终值为 10。
思路:
仔细读完题目后,我知道这个题目不难。
而Array.reduce()貌似是一个循环递加函数,没用过,不太了解哈哈哈。
再仔细看示例,好家伙题目不就是要求数组相加嘛,一个for循环就能解决。
再仔细看,连加法函数都给我写好了,那我还要写啥,非常简单就能得到思路:一个for循环收工。
代码如下:
/**
* @param {number[]} nums
* @param {Function} fn
* @param {number} init
* @return {number}
*/
var reduce = function(nums, fn, init) {
let val = init
for(let i = 0;i<nums.length;i++){
val = fn(val,nums[i])
}
return nums.length===0?init:val
};
执行如下图,还不赖
结论:查了一下Array.reduce使用,reduce()方法接收一个函数作为累加器,数组中每个值(从左到右),最终计算为一个值,注意:reduce()对于空数组是不会执行回调函数的。
这个函数为这个题量身定做,哈哈哈哈。
题目本身就是要我们实现一个reduce()函数吧,又名reduce()函数实现😋
目前写过最简单的题,继续下一个题。