JS之刷刷

实现一个函数 minBy(array, iteratee),该函数在遍历 array 后,根据 iteratee 的返回值找到最小值的元素。

这道题虽然思路很简单,就是按照应用itreratee然后排序,但是有一些细节需要注意

  • 做空值判断断言处理的时候需要将 null 和 undefined 都包含(但是这道题不做特殊处理下面也包含了)
  • 将iteratee作用在array元素上有时候会是undefined,那么就需要做判断是否纳入考虑
  • 如果最后 minIndex 还是初始的哨兵值的话,就返回 undefined
javascript 复制代码
export default function minBy(array, iteratee) {
  // if (!array || array.length === 0) return undefined
  // 注意特判

  let min ;
  let mini = -1;

  for (let i=0;i<array.length;i++){
    const val = iteratee(array[i])

    if ( val === undefined ) continue

    if(mini === -1 || val<min){
      mini = i;
      min = val;
    }
  }

  if (mini===-1) return undefined

  return array[mini];
}

事件循环(宏任务、微任务、渲染帧任务)

  • Promise里面的是同步代码,遇到resolve或reject放到微任务里面异步、去找then和catch
javascript 复制代码
const promise = new Promise((resolve, reject) => {
  console.log(1)
  resolve()
  console.log(2)
})
promise.then(() => {
  console.log(3)
})
console.log(4)
  • 1 2 4 3

Implement a function that performs a recursive, in-place quick sort. The function should take in an array of integers. The output should be an array with the input sorted in ascending order.

快速排序

  • 三路快排:分治、归并。在每段当前区间,将小与当前 pivot (默认是左边)的值排在左边,大于的排右边,那么中间的就是确定的等于的(和插入排序一样都是将无序的分为已定的有序的以及待排的无序的),然后接着对左右两边无序的排序,最后归并(其实也不用归了,因为是直接在arr绝对索引上改的)返回 arr
javascript 复制代码
export default function quickSort(arr,left=0,right=arr.length-1) {
  if(left>=right) return arr;
  let lt = left;
  let gt = right;
  let pivot = arr[left];
  let i = left+1;
  while(i<=gt){
    if(arr[i]<pivot){
      [arr[lt],arr[i]]=[arr[i],arr[lt]];
      lt++;
      i++;
    }else if(arr[i]>pivot){
      [arr[i],arr[gt]]=[arr[gt],arr[i]];
      gt--;
    }else{
      i++;
    }
  }

  quickSort(arr,left,lt-1);
  quickSort(arr,gt+1,right);

  return arr;
}

实现一个 useBoolean Hook,用于管理布尔状态,并提供额外的便捷实用方法。

写React自定义Hook管理状态(嵌套 useState 这个Hook钩子)

  • 别忘记初始化 = false
javascript 复制代码
import { useState } from 'react'
export default function useBoolean(initialValue = false) {
  const [value, setValue] = useState(initialValue);

  const setTrue = () => setValue(true);
  const setFalse = () => setValue(false);
  const toggle = () => setValue(v => !v);

  return { value, setTrue, setFalse, toggle };
}
相关推荐
今年下半年4 分钟前
【VUE3】移动端:使用腾讯地图显示区域统计与放大显示资产点位
javascript·前端框架·vue·地图
辛苦才能11 分钟前
C++ map/set 深度解析:从关联式容器的本质到 operator[] 的三重身份
开发语言·c++
Chen—LSN26 分钟前
C语言——文件操作(2)
c语言·开发语言·c++·经验分享·笔记·算法·c#
纪念 22931 分钟前
C++类和对象(最终篇)
开发语言·c++
a努力。39 分钟前
LangChain Agent消息链路全解析
java·前端·javascript
今年下半年42 分钟前
【前端】ant-design-vue 表格「行、列都动态」的处理方案
前端·javascript·vue.js
程序员yu1 小时前
会编网络:别被入门教程骗了,Python实用能力不在语法本身
开发语言·python·学习·算法
Bruce_Liuxiaowei1 小时前
Python 字典默认值完全指南:从 KeyError 到 defaultdict
开发语言·数据结构·python·字典
troy1281 小时前
Java 技术栈全景指南:从基础到微服务的完整知识体系
java·开发语言·微服务
Escalating_xu1 小时前
【C 语言】深入理解指针(2):数组名、数组传参、二级指针与指针数组
java·c语言·开发语言