js 面试题解析(一)
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 面试题解析(一)的更多相关文章
- 10个常见的Node.js面试题
如果你希望找一份有关Node.js的工作,但又不知道从哪里入手评测自己对Node.js的掌握程度. 本文就为你罗列了10个常见的Node.js面试题,分别考察了Node.js编程相关的几个主要方面. ...
- 有点难度的JS面试题
自己总结了一些JS面试题 希望能够帮助正在找工作的程序猿(●´∀`●) 1.js 实现一个函数对javascript中json 对象进行克隆 var oldObject ="sdf" ...
- vue.js面试题整理
Vue.js面试题整理 一.什么是MVVM? MVVM是Model-View-ViewModel的缩写.MVVM是一种设计思想.Model 层代表数据模型,也可以在Model中定义数据修改和操作的业务 ...
- js经典试题之常用的方法
js经典试题之常用的方法 1.下面代码输出的值 let s = "bob" const replaced = s.replace('b', 'l') replaced === &q ...
- js经典试题之运算符的优先级
js经典试题之运算符 1.假设val已经声明,可定义为任何值.则下面js代码有可能输出的结果为: console.log('Value is ' + (val != '0') ? 'define' : ...
- js经典试题之ES6
js经典试题之ES6 1:在ECMAScript6 中,Promise的状态 答案:pending resolved(fulfilled) rejected 解析: Promise对象只有三种状态: ...
- js经典试题之w3规范系列
js经典试题之w3规范系列 1:w3c 制定的 javascript 标准事件模型的正确的顺序? 答案:事件捕获->事件处理->事件冒泡 解析:先事件捕获从windows > doc ...
- js经典试题之原型与继承
js经典试题之原型与继承 1:以下代码中hasOwnProperty的作用是? var obj={} …….. obj.hasOwnProperty("val") 答案:判断obj ...
- js经典试题之数组与函数
js经典试题之数组与函数 1:列举js的全局函数? 答案:JavaScript 中包含以下 7 个全局函数escape( ).eval( ).isFinite( ).isNaN( ).parseFlo ...
随机推荐
- springcloud --- spring cloud sleuth和zipkin日志管理(spring boot 2.18)
前言 在spring cloud分布式架构中,系统被拆分成了许多个服务单元,业务复杂性提高.如果出现了异常情况,很难定位到错误位置,所以需要实现分布式链路追踪,跟进一个请求有哪些服务参与,参与的顺序如 ...
- session,cookie,sessionStorage,localStorage的相关设置以及获取删除
一.cookie 什么是 Cookie? "cookie 是存储于访问者的计算机中的变量.每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie.你可以使用 JavaScrip ...
- JZOJ 3875 星球联盟
[问题描述] 在遥远的 S 星系中一共有 N 个星球,编号为 1…N.其中的一些星球决定组成联盟, 以方便相互间的交流. 但是,组成联盟的首要条件就是交通条件.初始时,在这 N 个星球间有 M 条太空 ...
- Springboot 系列(十四)迅速启用 HTTPS 加密你的网站
1. 获取 HTTPS 证书 正常情况下 HTTPS 证书需要从证书授权中心获得,这样获得的证书才具有公信力,也会被各种浏览器客户端所认可.常见的证书品牌如 Symantec,GeoTrustm,Tr ...
- Ubuntu php + apache
Ubuntu 环境: 问题1: apache 不能解析 *.php 文件 安装apache的扩展模块 : apt-get install libapache2-mod-php 问题2 : 客户端访问 ...
- 事业单位招聘网搭建思路和seo方法
期望目标 自动采集事业单位招聘信息+自动发布到网站+自动提交网址到百度+自动发外链. 技术框架 前端用layUI,后端用flask,数据库用的elasticsearch,编程语言用Python 3.7 ...
- [Abp vNext 源码分析] - 11. 用户的自定义参数与配置
一.简要说明 文章信息: 基于的 ABP vNext 版本:1.0.0 创作日期:2019 年 10 月 23 日晚 更新日期:暂无 ABP vNext 针对用户可编辑的配置,提供了单独的 Volo. ...
- boost::asio::tcp
同步TCP通信服务端 #include <boost/asio.hpp> #include <iostream> using namespace boost::asio; in ...
- 02 Node.js学习笔记之http服务
在Node中可以非常轻松的构建一个Web服务器,在Node中提供了一个http模块,这个模块主要功能就是帮助你创建一个Web服务器. 创建步骤: //1.加载http模块 var http=requi ...
- .NET中国开发者峰会11.9 下午分会场1 内容解析
China .NET Conf 2019中国 .NET 开发者峰会即将在上海召开,这次大会是一届完全由社区组织举办的中国.NET 开发者盛会,我们筹备大会之初就定下了大会的主题是“开源.共享.创新”. ...