面试题-javascript常见手写代码

136 阅读1分钟

一.数组去重

1.直接给一个新的数组里面,利用es6的延展运算符

function fn(arr) {
  return [...new Set(arr)];
}

2.利用 filter() 去重

var arr = ['apple','apps','pear','apple','orange','apps'];
 
console.log(arr)    
  var newArr = arr.filter(function(item,index){
     return arr.indexOf(item) === index;  // 因为indexOf 只能查找到第一个  
  });
 
console.log(newArr); 

3.利用for 循环 搭配 indexOf 去重

var arr = [1, 9, 8, 8, 7, 2, 5, 3, 3, 3, 2, 3, 1, 4, 5, 444, 55, 22];
function noRepeat(arr) {
	//定义一个新的临时数组 
	var newArr = [];
	//遍历当前数组 
	for(var i = 0; i < arr.length; i++) {
		//如果当前数组的第i已经保存进了临时数组,那么跳过,
		//否则把当前项push到临时数组里面 
		if(newArr.indexOf(arr[i]) === -1) { //indexOf() 判断数组中有没有字符串值,如果没有则返回 -1 
			newArr.push(arr[i]);
		}
	}
	return newArr
}
var arr2 = noRepeat(arr);
console.log(arr2);

二.数组扁平化(就是把多维数组变成一维数组)

1.直接调用flat方法

let arr = [1, [2, [3, 4,[1,2,3]]]];
function flatten(arr) {
	return arr.flat(Infinity);
}
console.log(flatten(arr)); //  [1, 2, 3, 4,5]

2.使用递归实现

let arr = [1, [2, [3, 4, [1, 2, 3]]]];
function flatten(arr) {
	let res = []
	for(let i = 0; i < arr.length; i++) {
		if(Array.isArray(arr[i])) {
			res = res.concat(flatten(arr[i]))
		} else {
			res.push(arr[i])
		}
	}
	return res
}
console.log(flatten(arr))

三.防抖(用户触发事件过于频繁,只要最后一次事件的操作)

let t = null;
inp.oninput = function(){
    if(t !== null){
        clearTimeout(t)
    }
    t = setTimeout(()=>{
        console.log(this.value)
    },500)
}

四.节流(用户触发事件过于频繁,控制执行次数)

let flag = true
window.onscroll = function() {
    if(flag) {
        setTimeout(() => {
            console.log(123)
            flag = true
        },500)
    }
    flag = false
}

五.对象浅拷贝

let obj = {
    name:'王大顺',
    age:18
}
			
   let obj2 = obj
// 方法一:Object.assign()
// let obj2 = Object.assign({}, obj) 
			
// 方法二:解构赋值
// let obj2 = {...obj}
			
// 方法三:for in
// let obj2 = {}
// for(let i in obj){
// 	obj2[i] = obj[i]
// }

obj2.name = '王二顺'
console.log(obj.name)
console.log(obj2.name)