• JavaScript篇


    1、2618. 检查是否是类的对象实例

    描述:

    请你编写一个函数,检查给定的值是否是给定类或超类的实例。

    可以传递给函数的数据类型没有限制。例如,值或类可能是  undefined 。

    way1:非递归

    1. var checkIfInstanceOf = function(obj, classFunction) {
    2. if (classFunction === null || classFunction === undefined) {
    3. return false;
    4. }
    5. while(obj !== null && obj !== undefined) {
    6. if (obj === classFunction.prototype) {
    7. return true;
    8. };
    9. obj = obj.__proto__;
    10. // 用api的写法
    11. // obj = Object.getPrototypeOf(obj);
    12. }
    13. return false;
    14. };

    way2:递归

    1. var checkIfInstanceOf = function(obj, classFunction) {
    2. if (classFunction === null || classFunction === undefined ||
    3. obj === null || obj == undefined) {
    4. return false;
    5. };
    6. return obj.__proto__ === classFunction.prototype ||
    7. checkIfInstanceOf(obj.__proto__, classFunction);
    8. };

    2、2619. 数组原型对象的最后一个元素

    描述:请你编写一段代码实现一个数组方法,使任何数组都可以调用 array.last() 方法,这个方法将返回数组最后一个元素。如果数组中没有元素,则返回 -1 。

    1. Array.prototype.last = function() {
    2. // this指向实例
    3. return this.length ? this[this.length-1] : -1;
    4. // 使用合并操作符:??,当左边是null或者undefined时,返回右边边
    5. // 防止左边是0时,也返回右边
    6. return this[this.length - 1] ?? -1
    7. };

    3、2620. 计数器

    描述:请你编写并返回一个 计数器 函数,它接收一个整型参数 n 。这个 计数器 函数最初返回 n,每次调用它时返回前一个值加 1 的值 ( n ,  n + 1 ,  n + 2 ,等等)。

    考点:闭包

    1. var createCounter = function(n) {
    2. return function() {
    3. return n++;
    4. };
    5. };

    4、2621. 睡眠函数

    描述:请你编写一个异步函数,它接收一个正整数参数 millis ,并休眠这么多毫秒。要求此函数可以解析任何值。

    1. async function sleep(millis) {
    2. return new Promise((resolve)=> setTimeout(resolve, millis));
    3. }

    5、2622. 有时间限制的缓存

    描述:

    编写一个类,它允许获取和设置键-值对,并且每个键都有一个 过期时间 。

    该类有三个公共方法:

    • set(key, value, duration) :接收参数为整型键 key 、整型值 value 和以毫秒为单位的持续时间 duration 。一旦 duration 到期后,这个键就无法访问。如果相同的未过期键已经存在,该方法将返回 true ,否则返回 false 。如果该键已经存在,则它的值和持续时间都应该被覆盖。
    • get(key) :如果存在一个未过期的键,它应该返回这个键相关的值。否则返回 -1 。
    • count() :返回未过期键的总数。

    思路:计时器

    1. var TimeLimitedCache = function() {
    2. this.hashMap={}
    3. };
    4. /**
    5. * @param {number} key
    6. * @param {number} value
    7. * @param {number} time until expiration in ms
    8. * @return {boolean} if un-expired key already existed
    9. */
    10. TimeLimitedCache.prototype.set = function(key, value, duration) {
    11. let timer;
    12. let result=false
    13. if(this.hashMap[key]){
    14. clearTimeout(this.hashMap[key][1]);
    15. result=true;
    16. }
    17. timer=setTimeout(()=>{
    18. delete this.hashMap[key];
    19. },duration)
    20. this.hashMap[key]=[value,timer];
    21. return result;
    22. };
    23. /**
    24. * @param {number} key
    25. * @return {number} value associated with key
    26. */
    27. TimeLimitedCache.prototype.get = function(key) {
    28. return this.hashMap[key]?this.hashMap[key][0]:-1;
    29. };
    30. /**
    31. * @return {number} count of non-expired keys
    32. */
    33. TimeLimitedCache.prototype.count = function() {
    34. return Object.keys(this.hashMap).length;
    35. };
    36. /**
    37. * Your TimeLimitedCache object will be instantiated and called as such:
    38. * var obj = new TimeLimitedCache()
    39. * obj.set(1, 42, 1000); // false
    40. * obj.get(1) // 42
    41. * obj.count() // 1
    42. */

    6、2623. 记忆函数

    描述:

    请你编写一个函数,它接收另一个函数作为输入,并返回该函数的 记忆化后的结果。

    记忆函数 是一个对于相同的输入永远不会被调用两次的函数。相反,它将返回一个缓存值。

    你可以假设有 3 个可能的输入函数:sum 、fib 和 factorial 。

    •  sum 接收两个整型参数 a 和 b ,并返回 a + b 。
    •  fib 接收一个整型参数 n ,如果 n <= 1 则返回 1,否则返回 fib (n - 1) + fib (n - 2)
    •  factorial 接收一个整型参数 n ,如果 n <= 1 则返回  1 ,否则返回 factorial(n - 1) * n 。

    思路:

    • 使用map记录曾经输入过的入参以及入参对应的结果。
    • 后续相同入参能够在map中找到并直接返回结果,不需要再次调用fn,达到记忆的效果。
    1. function memoize(fn) {
    2. let m = new Map();
    3. return function (...args) {
    4. let key = Array.from(args).join(' ');
    5. if (!m.has(key)){
    6. m.set(key, fn(...args));
    7. };
    8. return m.get(key);
    9. }
    10. }

    7、2626. 数组归约运算

    1. var reduce = function(nums, fn, init) {
    2. for (let i=0; ilength; i++) {
    3. init = fn(init, nums[i]);
    4. };
    5. return init;
    6. };

    8、2629. 复合函数

    1. var compose = function(functions) {
    2. return function (x) {
    3. return functions.reduceRight((target, fn) => fn(target), x)
    4. }
    5. };

  • 相关阅读:
    【前端】vue中合并表格行
    反片语 set+哈希表 就C++代码而言,我很短
    rocketmq-dashboard docker部署设置账号密码
    UDP内网收发用netcat测试
    KVM Cloud云平台
    Jcmd 虚拟机诊断利器
    基于蒙特卡洛的电动车有序充放电(Matlab代码实现)
    【App自动化测试】(十四)Android WebView测试方法
    《安富莱嵌入式周报》第327期:Cortex-A7所有外设单片机玩法LL/HAL库全面上线,分享三款GUI, PX5 RTOS推出网络协议栈,小米Vela开源
    尚硅谷Vue系列教程学习笔记(8)
  • 原文地址:https://blog.csdn.net/weixin_43526403/article/details/132871565