面試手寫方法

數組

//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))
}

 

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