面试题

66 阅读2分钟

数据去重方法

  1. set去重(Array.from(new Set(arr))
  2. 遍历两遍数组,如果当前元素在后面数组中存在,则把后面数组的元素删除(arr.splice(j, 1))
  3. 建立一个空数组,将数组遍历一遍,判断当前元素在结果数组中是否存在(array.includes( arr[i] | array.indexOf(arr[i]))
  4. filter去重,使用过滤,只选取第一个查到的元素
return arr.filter(function (item, index, arr) {
      //当前元素,在原始数组中的第一个索引==当前索引值,否则返回当前元素
      return arr.indexOf(item, 0) === index;
});

Record | Pick的使用

TS内置泛型接口

React数据传递的方法

  1. props
    • 可以传递数据
    • 可以传递方法,在子组件中调用,可以修改父组件中的方法
  2. context
    • 创建context.js 引入const { Consumer, Provider } = React.createContext()
    • 引入 Provider ,包裹组件并传递数据
     return (
       <Provider 
       value={{name:this.state.obj.name,age:this.state.obj.age}}>
       <div className="App">
         app
         <Parent></Parent>
         <hr />
         <Uncle></Uncle>
       </div>
     </Provider>
     )
    
    • 引入 ConSumer ,包裹组件并读取数据
    return (<Consumer>
        {({age})=><div>
            编程不仅仅是技术,还是艺术!Parent
            <p>Jom,你今年{age}岁了,要懂事啦!</p>
            <hr />
            <Son></Son>
        </div>}
    </Consumer>)
    
  3. node的events模块的单例通信
  4. 资源管理器 (Redux|Mobx)

箭头函数的特点

  1. 箭头函数都是匿名函数
  2. 箭头函数不能作为构造函数
  3. 箭头函数不绑定arguments(就是不能传一堆参数被一个数据接收),取而代之用rest参数…(就是...rest)解决
  4. 箭头函数不能Generator函数,不能使用yeild关键字

一旦遇到 yield 表达式,生成器的代码将被暂停运行,直到生成器的 next() 方法被调用。每次调用生成器的 next() 方法时,生成器都会恢复执行,直到达到以下某个值

  1. 箭头函数不具有prototype原型对象
  2. 箭头函数不具有super
  3. 箭头函数不具有new.target

useState的原理

返回当前状态和设置状态的方法,每当状态改变之后,方法中会调用刷新视图的 render 方法。状态我们需要放在最外面,方便下次执行函数时可以重新取值。初始状态只会在函数第一次执行的时候赋值 多个useState需要同时使用,所以需要使用数据进行存储

let memoizedStates = []
let index = 0
function useState (initialState) {
  memoizedStates[index] = memoizedStates[index] || initialState
  let currentIndex = index
  function setState (newState) {
    memoizedStates[currentIndex] = newState
    render()
  }
  return [memoizedStates[index++], setState]
}