js面试题
1.数组有哪些方法?
数组的增删改查:push()、unshift()、shift()、pop()、splice()、join()、reverse()
数组的遍历操作:map()、filter()、some()、every()、findindex()、reduce()
2.map()对比forEach()
1.map有返回值可以开辟新空间return出来一个length和原数组一致的数组,即便数组元素是undefined或者是null
2.forEach默认无返回值,返回结果为undefined,可以通过在函数体内部使用索引修改数组元素
3.map的处理速度比forEach快,而且返回一个新的数组,方便链式调用其他数组新方法
3.Diff算法的基本概念和作用
Diff算法通过比较两个虚拟DOM树之间的差异,找出需要更新的部分,从而优化性能并减少不必要的操作。在前端框架中,Diff算法主要用于虚拟DOM的比较和更新过程。例如,React和Vue使用Diff算法进行虚拟DOM对比,只更新变化的部分,而不是重新渲染整个DOM。
4.for in对比for of区别
简单来说就是它们两者都可以用于遍历,不过for in遍历的是数组的索引(index),而for of遍历的是数组元素值(item)
5.数组去重的方法
1.利用新旧数组遍历对比法
arr=[1,5,1,3,5,4,3,9,8]
let newArr=[]
//indexOf用于查找数组元素第一次出现的位置,没找到则返回值为-1,参数有两个,第一个为元素项目,参数二(可选)需要查找的位置,负数从-1往前面加
for(let i = 0;i <arr.length;i++){
if(newArr.indexOf(arr[i] )=== -1) {
newArr.push(arr[i]);
}
}
console.log(newArr); //[1,5,3,4,9,8]
2.利用新语法 new Set()
arr=[1,5,1,3,5,4,3,9,8]
let mySet = new Set(arr); // 非重复的类数组
console.log(mySet,'mySet'); //{{1,5,3,4,9,8}}
//let newArr = Array.from(mySet); //set转数组
let newArr=[...mySet]; // 或者是这种解构方法
console.log(newArr); //[1,5,3,4,9,8]
3.filter与indexOf结合
过滤,利用索引与每一项出现的首次位置(indexOf作用)进行对比,当符合条件的时候返回回去
arr=[1,5,1,3,5,4,3,9,8]
var newArr=arr.filter((item,index) => {
return arr.indexOf(item) === index
})
console.log(newArr); //[1,5,3,4,9,8]
4.includes()的妙用
arr=[1,5,1,3,5,4,3,9,8]
let newArr=[]
for(let i=0;i<arr.length;i++){
if(!newArr.includes(arr[i])){
newArr.push(arr[i]);
}
}
console.log(newArr); //[1,5,3,4,9,8]
5.利用对象属性来进行判断
arr=[1,5,1,3,5,4,3,9,8]
let obj = {};
let newArr = [];
for(let i = 0;i<arr.length;i++){
if(!obj[arr[i]]){
obj[arr[i]] = arr[i];
}
}
console.log(obj); //{1:1,3:3,4:4,5:5,8:8,9:9}