分享Web前端开发面试十大总结_惠州前端培训学校
作者:hz_admin01发布时间:2022-04-27分类:前端开发专业浏览:718
今天惠州北大青鸟老师给大家分享Web前端开发面试十大总结,希望对大家有帮助。
一:字体高亮函数
题目:请你完成 highlight 函数,可以把模版字符串中的插入内容替换掉,并且插入文档以后显示红色。例如:
const yourName = 'ScriptOJ'
const myName = 'Jerry'
document.body.innerHTML = highlight`Hello, ${yourName}. I am ${myName}.`
上面例子的页面显示如下:
0_1498033735172_upload-2abd65b1-1e98-46ba-b46f-df4188a036a5
请你完成 highlight 函数的编写。
答案:
css:
.highlight {
color: red;
}
js:
// 考察的是 Tagged template literals 的使用
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
const highlight = (strings, ...args) => {
return strings.reduce((str, cur, i) => {
return `${str}${cur}${args[i] ? `<span class="highlight">${args[i]}</span>` : '' }`
}, '')
}
二: 数组去重
题目:编写一个函数 unique(arr),返回一个去除数组内重复的元素的数组。例如:
unique([0, 1, 2, 2, 3, 3, 4]) // => [0, 1, 2, 3, 4]
unique([0, 1, '1', '1', 2]) // => [0, 1, '1', 2]
答案:
const unique = (arr) => [...new Set(arr)]
三: 解析字串
题目:完成一个 extractStr 函数,可以把一个字符串中所有的 : 到 . 的子串解析出来并且存放到一个数组当中,例如:
extractStr('My name is:Jerry. My age is:12.') // => ['Jerry', '12']
注意,: 和 . 之间不包含 : 和 .。也即是说,如果 ::abc..,则返回 ['abc']。
(本题来源:《JavaScript Cookbook》)
答案:·
const extractStr = (str) => {
const ret = str.match(/:([^:\.])*?\./g) || []
return ret.map((subStr) => subStr.replace(/[:\.]/g, ''))
}
四: spacify题目:
请你给字符串都添加上原型方法 spacify,可以让一个字符串的每个字母都多出一个空格的间隔:"ScriptOJ".spacify() // => "S c r i p t O J"(本题来源:http://blog.sourcing.io/interview-questions)答案:String.prototype.spacify = function () {
return this.split('').join(' ')
}
五: safeGet
题目:有时候我们需要访问一个对象较深的层次,但是如果这个对象某个属性不存在的话就会报错,例如:
var data = { a: { b: { c: 'ScriptOJ' } } }
data.a.b.c // => scriptoj
data.a.b.c.d // => 报错,代码停止执行
console.log('ScriptOJ') // => 不会被执行
请你完成一个 safeGet 函数,可以安全的获取无限多层次的数据,一旦数据不存在不会报错,会返回 undefined,例如:
var data = { a: { b: { c: 'ScriptOJ' } } }
safeGet(data, 'a.b.c') // => scriptoj
safeGet(data, 'a.b.c.d') // => 返回 undefined
safeGet(data, 'a.b.c.d.e.f.g') // => 返回 undefined
console.log('ScriptOJ') // => 打印 ScriptOJ
答案:
const safeGet = (o, path) => {
try {
return path.split('.').reduce((o, k) => o[k], o)
} catch (e) {
return void 666
}
}
六: 判断两个矩形是否重叠
题目:用一个对象的数据来表示一个矩形的位置和大小:
{
x: 100,
y: 100,
width: 150,
height: 250
}
它表示一个宽为 150 高为 250 的矩形在页面上的 (100, 100) 的位置。
请你完成一个函数 isOverlap 可以接受两个矩形作为参数,判断这两个矩形在页面上是否重叠。例如:
const rect1 = { x: 100, y: 100, width: 100, height: 100 }
const rect2 = { x: 150, y: 150, width: 100, height: 100 }
isOverlap(rect1, rect2) // => true
答案:
// 原理:http://www.geeksforgeeks.org/find-two-rectangles-overlap/
const isOverlap = (rect1, rect2) => {
const l1 = { x: rect1.x, y: rect1.y }
const r1 = { x: rect1.x + rect1.width, y: rect1.y + rect1.height }
const l2 = { x: rect2.x, y: rect2.y }
const r2 = { x: rect2.x + rect2.width, y: rect2.y + rect2.height }
if (
l1.x > r2.x ||
l2.x > r1.x ||
l1.y > r2.y ||
l2.y > r1.y
) return false
return true
}
七:按下标插入
题目:现在有一个数组存放字符串数据:
['item1', 'item2', 'item3', 'item4', 'item5']
有另外一个数组存放一组对象:
[
{ content: 'section1', index: 0 },
{ content: 'section2', index: 2 }
]
它每个对象表示的是会往原来的数组的 index 坐标插入 content 数据(index 不会重复):
0 1 2 3 4
item1 itme2 item3 item4 item5
^ ^
| |
section1 section2
最后结果是:['section1', 'item1', 'item2', 'section2', 'item3', 'item4', 'item5']
请你完成 injectSections 函数,可以达到上述的功能:
injectSections(
['item1', 'item2', 'item3', 'item4', 'item5'],
[
{ content: 'section1', index: 0 },
{ content: 'section2', index: 2 }
]
) // => ['section1', 'item1', 'item2', 'section2', 'item3', 'item4', 'item5']
答案:
const injectSections = (items, sections) => {
/* 需要插入坐标对应数据存放到 map 里面 */
const sectionsMap = new Map(sections.map(({ index, content }) => [index, content]))
/* 新建一个数组,然后往里面 push 原来数组的数据 */
return items.reduce((ret, item, index) => {
/* push 的时候先检查 map 里面有没有,有的话先 push map 里面的数据 */
if (sectionsMap.has(index)) ret.push(sectionsMap.get(index))
/* 再 push 原来的数据 */
ret.push(item)
return ret
}, [])
}
八:数组拍平(二)
题目:编写一个 JavaScript generator 函数,接受一个仅包含数字的 多维数组 ,返回一个迭代器,可以遍历得到它拍平以后的结果。例如:
const numbers = flatten2([1, [[2], 3, 4], 5])
numbers.next().value // => 1
numbers.next().value // => 2
numbers.next().value // => 3
numbers.next().value // => 4
numbers.next().value // => 5
答案:
function *flatten2(arr) {
for (let i = 0; i < arr.length; i++) {
const item = arr[i]
/* yield* 的使用可以大大简化程序编写 */
Array.isArray(item) ? yield* flatten2(item) : yield item;
}
}
/* 用 flatten2 来完成 flatten 也是很方便的 */
// const flatten = (arr) => [...flatten2(arr)]
九:判断两个 Set 是否相同
题目:完成 isSameSet 函数,它接受了两个 Set 对象作为参数,请你返回 true/false 来表明这两个 set 的内容是否完全一致,例如:
const a = {}
const b = 1
const c = 'ScriptOJ'
const set1 = new Set([a, b, c])
const set2 = new Set([a, c, b])
isSameSet(set1, set2) // => true
答案:
//code from http://caibaojian.com/js-example.html
/* 这道题不能简单地使用 sort,使用 sort 并不靠谱。因为 Set 里面的内容可能有很多种类
* 字符串、对象、数字,不同类型之间是不可对比的,所以排序结果并不会一致
*
* 最好的方式是按照数学上集合相等的定义:
* A = B 当且仅当 A 是 B 的子集并且 B 是 A 的子集。
*
* 这种判断方式还可以用在 对象、map 等其他数据类型的判断当中。
*/
const isSameSet = (s1, s2) => {
/* 获取一个集合所有的值,判断另外一个集合是否全部包含该这些值 */
const isSame = (a, b) => {
const values = [...a]
for (let val of values) {
/* 及时跳出循环,可以降低算法复杂度 */
if (!b.has(val)) return false
}
return true
}
/* a 包含 b,b 包含 a,那么两个集合相同 */
return isSame(s1, s2) && isSame(s2, s1)
}
/* By 陈小俊 */
// const isSameSet = (set1, set2) =>
// [...set1].every((o) => set2.has(o)) &&
// [...set2].every((o) => set1.has(o))
十: 记忆化斐波那契函数(Memoization)
题目:斐波那契数列指的是类似于以下的数列:
1, 1, 2, 3, 5, 8, 13, ....
也就是,第 n 个数由数列的前两个相加而来:f(n) = f(n - 1) + f(n -2)
请你完成 fibonacci 函数,接受 n 作为参数,可以获取数列中第 n 个数,例如:
fibonacci(1) // => 1
fibonacci(2) // => 1
fibonacci(3) // => 2
...
测试程序会从按顺序依次获取斐波那契数列中的数,请注意程序不要超时,也不要添加额外的全局变量。
本题来源:《JavaScript 语言精髓》
答案:
const fibonacci = ((memo = [0, 1]) => {
const fib = (n) => {
let result = memo[n]
if (typeof result !== "number") {
result = fib(n - 1) + fib(n - 2)
memo[n] = result
}
return result
}
return fib
})()
最后就是反应能力,临场出现意外什么的了,这就看你自己了,万一自己一不留神说错话了,大神给你指出来,请记得谢谢一定要谦虚!
想了解更多关于前端的知识吗?可以来惠州北大青鸟新方舟校区了解一下。
标签:惠州前端培训学校惠州前端基础惠州前端培训北大青鸟IT计算机学校北大青鸟IT软件学校前端北大青鸟IT学校惠州北大青鸟北大青鸟
- 前端开发专业排行
- 标签列表
-
- Java (3694)
- 北大青鸟 (3713)
- 软件开发 (3613)
- JAVA (3413)
- UI设计入门 (2093)
- 惠州北大青鸟 (4375)
- 惠州IT培训 (2558)
- UI设计培训 (2090)
- 惠州UI设计培训 (2095)
- 惠州UI设计培训学校 (2090)
- 惠州计算机软件培训 (6260)
- 惠州计算件软件开发 (6260)
- 惠州计算机软件基础 (6261)
- 惠州计算机JAVA培训 (3574)
- 惠州计算机Java软件开发 (3620)
- 惠州计算机JAVA软件开发 (4645)
- 惠州计算机JAVA软件开发学校 (3338)
- 惠州计算机Java软件开发培训 (3338)
- 北大青鸟IT计算机学校 (5048)
- 北大青鸟IT软件学校 (5062)
- 北大青鸟IT学校 (5059)
- 惠州计算机UI设计软件开发 (2088)
- UI设计基础教程 (2088)
- UI设计是什么 (2088)
- UI设计教程 (2088)
- 网站分类
-
- 计算机教程
- 计算机入门
- 职业学校
- 新闻动态
- 专业课程
- 热门技术
- SEO
- 培训教程
- windows
- linux教程
- 系统集成
- 网站开发
- Html5
- 办公软件
- 师资力量
- 热点问答
- 联系我们
- 计算机学校
- 惠州计算机学校
- 河源计算机学校
- 广州计算机学校
- 深圳计算机学校
- 湛江计算机学校
- 佛山计算机学校
- IT计算机培训信息
- 设计专业
- UI
- 影视特效
- 游戏动漫设计
- Photoshop
- AI设计
- 软件教程
- Java技术
- C语言/C++语言培训
- C#
- Python技术
- PHP
- 数据库
- SQL Server
- 网络教程
- 网络安全
- 网络营销
- 软件专业
- 大数据专业
- 前端开发专业
- 软件测试专业
- Python专业
- 软件实施
- 珠海计算机学校
- 初中生学什么好
- 计算机认证
- 文章归档
-
- 2024年12月 (15)
- 2024年11月 (45)
- 2024年10月 (32)
- 2024年9月 (29)
- 2024年8月 (68)
- 2024年7月 (59)
- 2024年6月 (43)
- 2024年5月 (48)
- 2024年4月 (80)
- 2024年3月 (65)
- 2024年2月 (54)
- 2024年1月 (25)
- 2023年12月 (12)
- 2023年11月 (73)
- 2023年10月 (134)
- 2023年9月 (34)
- 2023年8月 (3)
- 2023年7月 (3)
- 2023年6月 (12)
- 2023年5月 (30)
- 2023年4月 (72)
- 2023年3月 (11)
- 2023年2月 (34)
- 2023年1月 (37)
- 2022年12月 (78)
- 2022年11月 (359)
- 2022年6月 (1193)
- 2022年5月 (570)
- 2022年4月 (1567)
- 2022年3月 (982)
- 2022年2月 (54)
- 2022年1月 (182)
- 2021年9月 (308)
- 2021年8月 (1704)
- 2021年7月 (2423)
- 2021年6月 (1806)
- 2021年5月 (1569)
- 2021年4月 (1380)
- 2021年3月 (1255)
- 2021年2月 (709)
- 2021年1月 (1521)
- 2020年12月 (3626)
- 2020年11月 (1646)
- 2020年10月 (1046)
- 2020年9月 (592)
- 最近发表
-
- 东莞信息:2024年长安镇技能创业咖啡节成功举办|||广州计算机软件培训
- 河源信息:本周六百企万岗职等你来市县镇联动大型招聘活动即将开幕!|||计算机培训学校招生
- 茂名信息:茂名组织劳动人事仲裁案件庭审观摩活动|||大学生计算机培训学校
- 茂名信息:茂名市人力资源和社会保障局相继开展诚信宣传四进主题实践活动|||广州市北大青鸟计算机职业培训学校
- 茂名信息:凝心聚力共筑平安茂名市人力资源和社会保障局开展平安建设暨一感两度宣传活动|||大学生计算机培训学校
- 汕头信息:汕头市人力资源和社会保障局开展宪法宣传周活动|||北大青鸟计算机培训中心
- 梅州信息:梅州市人社局开展2024年第四季度诚信文化主题宣传志愿服务活动|||电脑计算机编程培训学校
- 东莞信息:塘厦人社分局联合消防大队开展技工学校等机构消防安全培训|||广州计算机软件培训
- 东莞信息:塘厦塘厦镇成功举办优才服务区第二期业务提升培训班|||计算机软件培训学校
- 东莞信息:2024年横沥镇举办模具设计师职业技能大赛|||广州计算机软件培训