記錄幾個有趣的面試題

平時會看到一些,或者其他分享的有趣的面試題。
特在此處整理。你問我爲什麼?
image

數組相關

分割數組

問題描述
寫一個函數 xxx(n,m) 實現將1~n平均的分爲m組,
如輸入 xxx(5,2)
輸出 [[1,2,3],[4,5]]
輸入 xxx(10,6)
輸出 [[1,2],[3,4],[5,6],[7,8],[9],[10]]

  • 思路來源
const chunk = (arr, size) =>
Array.from({length: Math.ceil(arr.length / size)}, (v, i) => arr.slice(i * size, i * size + size));
  • 最終結果
const chunk = (m,n)=>{
    const arr = Array(m).fill(0).map((v,i)=>i);
    const size = m-n;
    return Array.from({length:n},(v,i)=>arr.slice(size*i,size*i+size));
}

思路
1. 填充數組arr
2. 根據要分割比例,計算每一份的大小,分割arr。

作用域

題目描述
如下代碼將會輸出什麼結果

var a = 5;
function b(){
 if(!a){
    var a = 10;
 }
 console.log(a);
}
b();

本題考查函數作用域和變量提升。
分析

  1. js有三個作用域 global、塊級作用域let,const(ES6新增)、function。if顯然不是
  2. 聲明變量會在解析過程中提升到作用域頂部執行。

由此可得: 在函數體b開始執行時,由於變量提升。 存在局部變量a初始值undefinded;所以最終答案是10
想不到吧

ES6相關

map+parseInt

題目描述
[1,7,11].map(parseInt) 輸出結果爲什麼

要想弄清結果如何,必須先弄清這兩個API的運作機制。

  • map接受一個callback(item,key,array,context)回調函數。
  • parseInt將參數按照約定類型轉換,可接受兩個參數。(str,radix)。radix是一個介於2~36之間的整數(對應進制類型);參數不填,或者爲0默認是10進制

我們帶入循環。

  • 1=> parseInt(1,0); // 十進制結果 1
  • 7=> parseInt(7,1); // 非法入參結果 NAN
  • 10=>parseInt(10,2);// 二進制結果 3

算法相關

編程題,請寫一個函數,完成以下功能

輸入 ‘1, 2, 3, 5, 7, 8, 10’ 輸出 ‘1~3, 5, 7~8, 10’

function transArr(str) {
  return str.split(",").map((item, key, arr) => (arr[key + 1] != +item + 1 || key === 0 || arr[key - 1] != item - 1) ? item == +arr[key - 1] + 1 ? `,${item}` : item : ",").toString().replace(/(,)\1+/g, '~')
}

思路

  1. 標識符合位置 : [1,2,3,8,9,10] >> [1,undefined,’,3’,8,undefinded,’,10’]
  2. toString 去undefinded 1,3,8,10
  3. 利用replace 替換 ,,~ 完成。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章