先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注大数据)
正文
4、如果参数为空或者不是 Number
类型,返回 false
5、其余情况,返回参数 num
示例:
输入:15
输出:fizzbuzz
这就是简单的分支判断:
function fizzBuzz(num) {
if (!num || typeof num !== "number") return false;
if (num % 3 === 0 && num % 5 === 0) return "fizzbuzz";
if (num % 3 === 0) return "fizz";
if (num % 5 === 0) return "buzz";
return num;
}
三、闭包应用
实现函数 makeClosures
,调用之后满足如下条件:
1、返回一个函数数组 result
,长度与 arr
相同
2、运行 result
中第 i
个函数,即 result[i]()
,结果与 fn(arr[i])
相同
示例:
var arr = [1, 2, 3];
var fn = function (x) {
return x \* x;
};
var result = makeClosures(arr, fn);
result[1]() === fn(arr[1]) ? console.log("yes") === 4 : console.log("no"); // yes
解:
function makeClosures(arr, fn) {
const result = []
arr.forEach(item=>{
result.push(function(){
return fn(item)
})
})
return result
}
这题一眼看上去感觉是比较绕,但你从上到下去梳理就很容易找到解决的方法:
makeClosures
返回一个数组- 数组中每个元素都是一个函数
- 并且这些函数执行的结果要与使用
arr
中对应元素作为参数调用fn
的结果一致
四、arguments剩余参数
函数 useArguments
可以接收 1 个及以上的参数。请实现函数 useArguments
,返回所有调用参数相加后的结果。本题的测试参数全部为 Number
类型,不需考虑参数转换。
输入:1, 2, 3, 4
输出:10
解:
function useArguments() {
return [...arguments].reduce((a, b) => a + b);
}
函数中能直接访问arguments
变量,这个变量是一个含有该函数接收的所有参数的伪数组(不具有数组的全部方法)。
所以我是先使用...
解构来将arguments
转换成一个真正的数组,之后调用数组的reduce
求和方法进行求和即可。
reduce()
方法对数组中的每个元素按序执行一个由您提供的 reducer
函数,每一次运行 reducer
会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。
Array.prototype.reduce(callbackFn, initialValue)
参数:
-
callbackFn
一个 “reducer
” 函数,包含四个参数:previousValue
:上一次调用callbackFn
时的返回值。在第一次调用时,若指定了初始值initialValue
,其值则为initialValue
,否则为数组索引为 0 的元素array[0]
。currentValue
:数组中正在处理的元素。在第一次调用时,若指定了初始值initialValue
,其值则为数组索引为 0 的元素array[0]
,否则为array[1]
。currentIndex
:数组中正在处理的元素的索引。若指定了初始值initialValue
,则起始索引号为 0,否则从索引 1 起始。array
:用于遍历的数组。
-
initialValue
可选
作为第一次调用callback
函数时参数previousValue
的值。若指定了初始值initialValue
,则currentValue
则将使用数组第一个元素;否则previousValue
将使用数组第一个元素,而currentValue
将使用数组第二个元素。
五、二次封装函数
实现函数 partialUsingArguments
,调用之后满足如下条件:
1、返回一个函数 result
2、调用 result
之后,返回的结果与调用函数 fn
的结果一致
3、fn
的调用参数为 partialUsingArguments
的第一个参数之后的全部参数以及 result
的调用参数
解:
function partialUsingArguments(fn) {
const arr = [].slice.call(arguments,1)
return function (...arr2) { // ...arr2表示用arr2接收所有参数,arr2是一个数组
return fn(...arr,...arr2)
}
}
第一个arr
数组表示的是partialUsingArguments
接收的第一个参数之后的全部参数数组。
因为arguments
是伪数组,不具有slice
方法,所以这里通过随便一个数组(我选的是空数组[]
)来调用slice
,然后通过call
修改调用的这个slice
的this
指向,使其指向到arguments
,这样就相当于是在arguments
上使用slice
方法。
call
修改函数this
指向并立即调用该函数,call
第一个参数表示需要修改的this
指向,之后的所有参数都会作为原函数的参数传递到原函数中。
slice(begin,end)
方法能切割数组,返回一个新的数组对象,这一对象是一个由begin
和end
决定的原数组的浅拷贝(包括begin
,不包括end
)。原始数组不会被改变。
不加end
参数表示从begin
一直切割到最后。
结语
这篇文章的所有内容都出自于牛客网的JS篇题库:
牛客网的JS
题库非常贴合实际的,在写的过程中自己查漏补缺,收获了很多,强烈将牛客网推荐给大家!
如果本篇文章对你有所帮助,还请客官一件四连!❤️
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注大数据)
[外链图片转存中…(img-weJQEuIa-1713343774160)]
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!