首页 > Web开发 > 详细

js 面试题解析(一)

时间:2019-11-08 21:08:15      阅读:77      评论:0      收藏:0      [点我收藏+]

 

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)首先使用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()

 

js 面试题解析(一)

原文:https://www.cnblogs.com/qimiaojiyi/p/11821988.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!