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. VS2010连接Oracle配置

    直接看上图.EZ连接和TNS连接.TNS连接要修改tnsnames.tns文件内部的host为服务器地址

  2. latex转word公式 java (latextoword,latex_word,latex2word,latex_omml)

    latex_word 主要目的:     给大家分享一个我的原创作品:latex转为word公式(omml)工具 [java] 此工具主要用于将含有latex公式的文本下载成word时,将latex转 ...

  3. hadoop之yarn详解(框架进阶篇)

    前面在hadoop之yarn详解(基础架构篇)这篇文章提到了yarn的重要组件有ResourceManager,NodeManager,ApplicationMaster等,以及yarn调度作业的运行 ...

  4. TCP/UDP的小事情

    UDP: 没有复杂的控制机制,面向无连接的通信服务. 常用于: 包总量少的通信 音视频传输(即时通信) TCP: 对传输.发送.通信.进行控制的协议.面向有连接的协议,只有在确认通信对端存在时才会发送 ...

  5. 通过搭建MySQL掌握k8s(Kubernetes)重要概念(上):网络与持久卷

    上一篇"通过实例快速掌握k8s(Kubernetes)核心概念"讲解了k8s的核心概念,有了核心概念整个骨架就完整了,应付无状态程序已经够了,但还不够丰满.应用程序分成两种,无状态 ...

  6. jquery经常用到的代码段

    1.1jquery实现手风琴效果 <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"&g ...

  7. 算法学习之剑指offer(一)

    题目一: 题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路1:遍历 ...

  8. MyEclipse10 使用JRebel实现热部署

    MyEclipse10 使用JRebel实现热部署 Window --Preferences-Tomcat 6.x-JDK-JVM -noverify -javaagent:D:\JRebel\jre ...

  9. CTF-SSH私钥泄露渗透

    环境 Kali ip 192.168.56.102 Smb 靶机ip 192.168.56.104 0x01信息探测 使用netdiscover -r ip/mask 进行内网网段存活ip探测 靶机为 ...

  10. 【Spring Cloud】客户端负载均衡组件——Ribbon(三)

    一.负载均衡 负载均衡技术是提高系统可用性.缓解网络压力和处理能力扩容的重要手段之一. 负载均衡可以分为服务器负载均衡和客户端负载均衡,服务器负载均衡由服务器实现,客户端只需正常访问:客户端负载均衡技 ...