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 ...
随机推荐
- cat命令显示文件指定行
cat filename | tail -n 100 显示文件最后100行 cat filename | head -n 100 显示文件前面100行 cat filename | tail -n + ...
- LitePal的修改和删除操作
转载出处:http://blog.csdn.net/guolin_blog/article/details/40083685 传统的修改和删除数据方式 上篇文章中我们已经得知,SQLiteData ...
- 阿里巴巴开源 Dragonwell JDK 最新版本 8.1.1-GA 发布
导读:新版本主要有三大变化:同步了 OpenJDK 上游社区 jdk8u222-ga 的最新更新:带来了正式的 feature:G1ElasticHeap:发布了用户期待的 Windows 实验版本 ...
- Io流的概述
Io流的概述IO: I输入(Input),O 输出(Output)1.什么是IO流? 数据流,IO是严格的“水流模型” 所以IO流是用来读写数据,或者传输数据. 注意:File只能操作文件对象本身,而 ...
- 前端开发 JavaScript 干货知识点汇总
很多初学的朋友经常问我,前端JavaScript都需要学习哪些东西呀?哪些是JavaScript的重点知识啊? 其实做前端开发工程师,所有的知识点都是我们学习必备的东西,只有扎实的技术基础才是高薪的关 ...
- 2-SAT问题学习笔记+例题[洛谷P4792]
一个不错的2-SAT文章:传送门 问题初入 什么是2-SAT SAT是适定性(Satisfiability)问题的简称 .一般形式为k-适定性问题,简称 k-SAT. 首先,把「2」和「SAT」拆开. ...
- 权限维持-wmi事件
0x01 前言 WMIC扩展WMI(Windows Management Instrumentation,Windows管理工具),提供了从命令行接口和批命令脚本执行系统管理的支持. 在2015年的b ...
- 全平台正向tcp端口转发工具rinetd的使用
Linux下做地址NAT有很多种方法.比如haproxy.nginx的4层代理,linux自带的iptables等都能实现.其实,Linux下有一个叫rinetd的工具,安装简单,配置也不复杂. 下载 ...
- PHP 插入排序 -- 希尔排序
1.希尔排序 -- Shell Insertion Sort 时间复杂度:数学家正在勤劳的探索! 适用条件: 直接插入排序的改进,主要针对移动次数的减少,这取决于"增量队列"的取值 ...
- 高通电源管理函数的power_supply的调用关系
以msm8909为例,高通的主要文件有几个: qpnp-linear-charger.c(线性充电器) qpnp-vm-bms.c(BMS管理) power_supply_core.c(power_s ...