前端面试题总结五

前言

继续。。

正文

1.写 React / Vue 项目时为什么要在组件中写 key,其作用是什么
vue和react都是采用diff算法来对比新旧虚拟节点,从而更新节点。在vue的diff函数中。可以先了解一下diff算法。
在交叉对比的时候,当新节点跟旧节点头尾交叉对比没有结果的时候,会根据新节点的key去对比旧节点数组中的key,从而找到相应旧节点(这里对应的是一个key => index 的map映射)。如果没找到就认为是一个新增节点。而如果没有key,那么就会采用一种遍历查找的方式去找到对应的旧节点。一种一个map映射,另一种是遍历查找。相比而言。map映射的速度更快。

2.实现一个bind函数

Function.prototype.bind1 = function(content){
  var self = this
  return function(){
   return self.apply(content,arguments)
  }
}

重点在于保存this,就是调用的函数。

4.大数加法

function sub(a,b){
  let res = ''
  a = a.toString().split('')
  b= b.toString().split('')
  let c =0

if(a[0] == "-"||b[0] == '-'){
  while(a.length||b.length){
    c+= ~~a.pop()-~~b.pop()
    res = c%10+res
    c = c>9
    console.log(c);
  }
}
  return res
}

5.给定无序、不重复的数组 data,取出 n 个数,使其相加和为 sum

function add(arr, n, sum) {
  let l = arr.length
  let result = []
  if (l < n) {
    console.log('err1');
    return;
  } else {
    if (arr.length < n) {
      console.log('err2');
      return;
    }
    let flag = true;
    while (flag) {
      function radom(arr, n) {
        let a = []
        while (n) {
          let zz = Math.floor(Math.random() * arr.length);
          a.push(arr[zz])
          arr.splice(zz, 1)
          n--
        }
        return a
      }

      let zarr = []
      arr.forEach(item => zarr.push(item))
      let newarr = radom(zarr, n)
      let test = newarr.reduce((a, b) => a + b)

      if (test === sum) {
        result = newarr
        flag = false
      }

    }
  }
  return result;
}

这道题,想了很久,也没什么好办法,希望大家可以交流交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值