js 面試題解析(一)

 

1.call和apply的區別。

當須要傳的參數是一個數組時,使用apply更加方便;而使用call時須要將數組展開,將數組中的每一項單獨傳入。es6

當須要傳入的參數大於3個時,call的性能要略優於apply。數組

fn.call(obj,1,2,3)app

fn.apply(obj,arr),fn.call(obj,...arr)ide

 

2.把一個字符串的大小寫取反。

let str = "asdfasFDGLASD你好,世界"函數

str = str.replace(/[a-zA-Z]/g,content => {性能

return content.toUpperCase() === content ? content.toLowerCase() :content.toUpperCase();this

})atom

3.手寫indexOf方法

function myIndexOf(T) {spa

let lenT = T.length,prototype

lenS = this.length,

res = -1;

for (let i = 0; i <= lenS - lenT) {

if (this.substring(i, lenT) == T) {

res = i;

break;

}

}

return res;

}

String.prototype.myIndexOf = myIndexOf;

 

let S = "asdjlkasfrqwoi",

T = "rqw";

使用正則完成效果:/rqw/.exec("asdjlkasfrqwoi")

function myIndexOf(T) {

let reg = new RegExp(T),

res = reg.exec(this);

return res === null ? -1 : res;

}

4.將數組扁平化,並去重,獲得一個升序且不重複的數組。

(1)首先使用es6提供的方法解決問題:

let arr =  [1,2,1,5,[5,3,3,4,[8,3,6,7,[5,6]]]]
//使用es6中的Array,prototype.flat處理(將數組扁平化)
arr = arr.flat(Infinity);
//使用new set進行數組去重
arr = new Set(arr);
//使用sort進行排序
arr = Array.from(arr.sort((a,b) => a-b))

(2)將數組轉爲字符串,直接去除中括號,再轉回數組進行去重排序操做。

let arr =  [1,2,1,5,[5,3,3,4,[8,3,6,7,[5,6]]]]
//轉爲字符串
arr = arr.toString()
//轉回數組
arr = arr.split(',')
//使用map函數轉爲數字
arr = arr.map(item => {
   return Number(item);
});
//使用new set進行數組去重
arr = new Set(arr);
//使用sort進行排序
arr = Array.from(arr.sort((a,b) => a-b))

(3)使用some方法結合展開運算符將數組扁平化。

let arr =  [1,2,1,5,[5,3,3,4,[8,3,6,7,[5,6]]]]
//使用some方法檢測arr中是否還包含有數組,爲true就使用展開運算符繼續將arr中的數組展開一層
while (arr.some(item => Array.isArray(item))){
   arr = [].concat(...arr)
}
//使用new set進行數組去重
arr = new Set(arr);
//使用sort進行排序
arr = Array.from(arr.sort((a,b) => a-b))

(4)使用遞歸的方法將數組扁平化。

let arr =  [1,2,1,5,[5,3,3,4,[8,3,6,7,[5,6]]]]
~ function () {
   function myFlat() {
       let res = [],
           _this = this;
       let fn = (arr) => {
           for(let i = 0; i < arr.length; i++){
               let item = arr[i];
               if (Array.isArray(item)){
                   fn(item);
                   continue;
              }
               res.push(item)
          }
      }
       fn(_this);
       return res
  }
   Array.prototype.myFlat = myFlat
}()
arr = arr.myFlat()
相關文章
相關標籤/搜索