前端面试题总结五
2019-03-24 13:58
120 查看
前言
继续。。
正文
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; }
这道题,想了很久,也没什么好办法,希望大家可以交流交流。
相关文章推荐
- 前端面试题总结
- 前端面试题总结HTML CSS部分
- 关于web前端面试题系列之必考面试题(面试官总结)
- 前端面试题总结
- 前端周报:前端面试题及答案总结;JavaScript参数传递的深入理解
- 自己总结的web前端的jquery面试题
- 2017前端面试题总结
- 某一线互联网公司前端面试题js部分总结
- 总结一下前端面试题之Html和CSS
- 2016前端面试题总结
- 2017自己前端面试题总结
- Web前端面试题总结
- Web前端笔试面试题总结
- 总结一下前端面试题之Html和CSS
- web前端面试题总结
- Web前端面试题总结(day6)
- 前端面试题总结
- Java前端面试题总结
- 第136天:Web前端面试题总结(理论)
- 前端面试题总结 持续更新