面试手写方法

数组

//map
Array.prototype._map = function(fn){
    return this.reduce((result,item)=>[...result,item],[])
}


//filter
Array.prototype._filter = function(fn){
    return this.reduce((result,item)=> fn(item) ? [...result,item] : result,[])
}

//扁平化
function(arr){
  arr = arr.toString().split(',').map(item=>{
	  return +item
  })
  return arr
}
//纯数字时使用,若其中有其他类型,则需另外判断或另行他法
//当然,最简单的是 arr.flat(x)

var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10];
编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组
Array.from(new Set(arr.toString().split(',').map(i => {
  return +i
}))).sort((a, b) => {
  return a - b
})

//统计个数
let arr = [0, 1, 1, 2, 2, 2];
let count = arr.reduce((t, c) => {
    t[c] = t[c] ? ++ t[c] : 1;
    return t;
}, {});

//克隆 
let arr1 = [...arr]

//合并 
let arr = [...arr1,...arr2] concat

//去重 
let arr = [...new Set(arr1)]

//混淆 
let arr = arr.slice().sort(()=> Math.random - .5)

//截断 
arr.length = 0

//交换 
[a,b] = [b,a]

//滤空 
arr.filter(Boolean)

累加 
//arr.reduce((result,item)=> {return result+item})

Number

//取整:num = ~~1.69 num = 1.69 | 0 num = 1.69 >> 0

//补零:
let FillZero = (num, len) => num.toString().padStart(len, "0");
let num = FillZero(169, 5);

//时间戳:
+new Date() Date.now()

//取最大最小值:
Math.max() Math.min()

String

//千分位:
num.toLocaleString() //num必须是数字

//生成随机ID:
let RandomId = len => Math.random().toString(36).substr(3, len);

Object

//深克隆 
JSON.parse(JSON.stringify(obj1))
//当然这种不是最好的方式,对于Date Reg等是不适用的

//合并对象 
let obj{...obj1,...obj2}

//对象字面量 
const env = "prod";const link = {dev: 1,test: 2,prod: 3}[env];

//对象变量属性
let flag = false
let obj = {a:0,b:1,[flag?'c':'d']:2}

//创建纯空对象 
Object.create(null)

//删除无用对象 
let obj = {a:1,b:2,c:3} let {d,...e} = obj // e = {b:2,c:3}

Function

//函数节流
function throttle(fn,interval){
  let canRun = true
  return function(){
    if(!canRun)return;
    canRun = false
    setTimeout(
      ()=>{
        fn.apply(this,arguments)
        canRun = true
      },interval)
  }
}

//函数防抖 
function debounce(fn,interval){
  let timeout = null
  return function(){
    clearTimeout(timeout)
    timeout = setTimeout(()=>{
      fn.apply(this,arguments)
    },interval)
  }
}

//手写一个sleep函数
var sleep = async function(timer){
	var fn = setTimeout(function(){
		console.log('打印')
	},timer)
	await fn
	
}
//async await

//输出1-10000中所有的对称数:例如121 1331等
var fn = function(){
	return [...Array(10001).keys()].filter(x =>{
		return x > 9 && x == (x.toString().split('').reverse().join(''))
	})
}

给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数
var fn = function(arr,k){
	return arr.slice(arr.length - k).concat(arr.slice(0,arr.length - k))
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章