一、睡眠函数
题目:
请你编写一个异步函数,它接收一个正整数参数
millis
,并休眠millis
毫秒。要求此函数可以解析任何值。示例 1:
输入:millis = 100 输出:100 解释: 在 100ms 后此异步函数执行完时返回一个 Promise 对象 let t = Date.now(); sleep(100).then(() => { console.log(Date.now() - t); // 100 });示例 2:
输入:millis = 200 输出:200 解释:在 200ms 后函数执行完时返回一个 Promise 对象提示:
1 <= millis <= 1000
/** * @param {number} millis * @return {Promise} */ async function sleep(millis) { } /** * let t = Date.now() * sleep(100).then(() => console.log(Date.now() - t)) // 100 */
解题:
async function sleep(millis) { return new Promise(resolve => setTimeout(resolve, millis)); }
二、数组约归计算
题目:
给定一个整数数组
nums
、一个 reducer 函数fn
和一个初始值init
,返回通过依次对数组的每个元素执行fn
函数得到的最终结果。通过以下操作实现这个结果:
val = fn(init, nums[0]),val = fn(val, nums[1]),val = fn(val, nums[2]),...
直到处理数组中的每个元素。然后返回val
的最终值。如果数组的长度为 0,则函数应返回
init
。请你在不使用内置数组方法的
Array.reduce
前提下解决这个问题。示例 1:
输入: 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。示例 2:
输入: nums = [1,2,3,4] fn = function sum(accum, curr) { return accum + curr * curr; } init = 100 输出:130 解释: 初始值为 init=100 。 (100) + nums[0]^2 = 101 (101) + nums[1]^2 = 105 (105) + nums[2]^2 = 114 (114) + nums[3]^2 = 130 Val 最终值为 130。示例3:
输入: nums = [] fn = function sum(accum, curr) { return 0; } init = 25 输出:25 解释:这是一个空数组,所以返回 init 。提示:
0 <= nums.length <= 1000
0 <= nums[i] <= 1000
0 <= init <= 1000
/** * @param {number[]} nums * @param {Function} fn * @param {number} init * @return {number} */ var reduce = function(nums, fn, init) { };
题解:
var reduce = function(nums, fn, init) { let val = init; // 初始化 val 为初始值 // 遍历数组 nums for (let i = 0; i < nums.length; i++) { val = fn(val, nums[i]); // 使用 fn 函数更新 val } return val; // 返回最终的 val 值 };