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 面试题解析(一)的更多相关文章

  1. 10个常见的Node.js面试题

    如果你希望找一份有关Node.js的工作,但又不知道从哪里入手评测自己对Node.js的掌握程度. 本文就为你罗列了10个常见的Node.js面试题,分别考察了Node.js编程相关的几个主要方面. ...

  2. 有点难度的JS面试题

    自己总结了一些JS面试题 希望能够帮助正在找工作的程序猿(●´∀`●) 1.js 实现一个函数对javascript中json 对象进行克隆 var oldObject ="sdf" ...

  3. vue.js面试题整理

    Vue.js面试题整理 一.什么是MVVM? MVVM是Model-View-ViewModel的缩写.MVVM是一种设计思想.Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务 ...

  4. js经典试题之常用的方法

    js经典试题之常用的方法 1.下面代码输出的值 let s = "bob" const replaced = s.replace('b', 'l') replaced === &q ...

  5. js经典试题之运算符的优先级

    js经典试题之运算符 1.假设val已经声明,可定义为任何值.则下面js代码有可能输出的结果为: console.log('Value is ' + (val != '0') ? 'define' : ...

  6. js经典试题之ES6

    js经典试题之ES6 1:在ECMAScript6 中,Promise的状态 答案:pending  resolved(fulfilled) rejected 解析: Promise对象只有三种状态: ...

  7. js经典试题之w3规范系列

    js经典试题之w3规范系列 1:w3c 制定的 javascript 标准事件模型的正确的顺序? 答案:事件捕获->事件处理->事件冒泡 解析:先事件捕获从windows > doc ...

  8. js经典试题之原型与继承

    js经典试题之原型与继承 1:以下代码中hasOwnProperty的作用是? var obj={} …….. obj.hasOwnProperty("val") 答案:判断obj ...

  9. js经典试题之数组与函数

    js经典试题之数组与函数 1:列举js的全局函数? 答案:JavaScript 中包含以下 7 个全局函数escape( ).eval( ).isFinite( ).isNaN( ).parseFlo ...

随机推荐

  1. 【集群监控】Prometheus+AlertManager实现邮件报警

    AlertManager下载 https://prometheus.io/download/ 解压 添加配置文件test.yml,配置收发邮件邮箱 Prometheus下载配置参考我的另一篇: htt ...

  2. 针对永久不过期的key 批量设置过期时间

    问题需求: redis内存暴增,后来发现有很多设置永久不过期. 解决:查找出来之后针对前缀批量设置过期时间 (过期时间与开发沟通 保证服务不受影响) 来源于网上杨一的代码 正好解决了我遇到的问题 在这 ...

  3. SpringBootSecurity学习(23)前后端分离版之OAuth2.0 其它模式

    密码模式 前面介绍了授权码模式和刷新令牌两种获取最新令牌的方法,下面来看一下其它模式.首先看密码模式,我们默认配置的三种模式中其实就包含密码模式的支持: 因此我们启动项目,直接使用密码模式即可,访问地 ...

  4. 【JZOJ5329】-时间机器

    [JZOJ5264]化学 Description Input Output Sample Input 3 10 1 2 10 Sample Output 5 Hint 题解: 这个题目又是一道贪心题, ...

  5. Spring Boot 2.2 正式发布,大幅性能提升 + Java 13 支持

    之前 Spring Boot 2.2没能按时发布,是由于 Spring Framework 5.2 的发布受阻而推迟.这次随着 Spring Framework 5.2.0 成功发布之后,Spring ...

  6. 面试官,Java8 JVM内存结构变了,永久代到元空间

    在文章<JVM之内存结构详解>中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化.作为面试官如果你还不知道,那么面试过程中是不是有些露怯? ...

  7. 关于参加AWD攻防比赛心得体会

    今天只是简单写下心得和体会 平时工作很忙 留给学习的时间更加珍少宝贵. 重点说下第二天的攻防比赛吧  . 三波web题 .涉及jsp,php,py. 前期我们打的很猛.第一波jsp的题看到有首页预留后 ...

  8. 实验吧之【who are you?】(时间盲注)

    地址:http://ctf5.shiyanbar.com/web/wonderkun/index.php 这道题点开看见your ip is :xxx.xxx.xx.xxx 试了一些 最后发现是XFF ...

  9. 安装VMware Tools显示灰色正确解决办法

    首先问题如下: 解决办法如下:1.关闭虚拟机: 2.在虚拟机设置分别设置CD/DVD.CD/DVD2和软盘为自动检测三个步骤: 3.再重启虚拟机,灰色字即点亮. 大功告成,如果解决了你的问题,点个赞鼓 ...

  10. SQL Server Try Catch 异常捕捉

    SQL Server Try Catch 异常捕捉 背景 今天遇到一个关于try catch 使用比较有意思的问题.如下一段代码: SELECT @@TRANCOUNT AS A BEGIN TRY ...