js面接問題解析(一)

23683 ワード


1.callとapplyの違い.
伝達するパラメータが配列である必要がある場合、applyの使用はより便利である.一方、callを使用する場合は、配列を展開し、配列の各項目を個別に入力する必要があります.
入力するパラメータが3つより大きい場合、callの性能はapplyよりやや優れている.
fn.call(obj,1,2,3)
fn.apply(obj,arr),fn.call(obj,...arr)
 
2.文字列の大文字と小文字を逆にします.
let str=「asdfasFDGLASDこんにちは、世界」
str = str.replace(/[a-zA-Z]/g,content => {
return content.toUpperCase() === content ? content.toLowerCase() :content.toUpperCase();
}
3.手書きindexOf方法
function myIndexOf(T) {
let lenT = T.length,
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)まずes 6が提供する方法を用いて問題を解決する.
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()