2018/03/26百词斩面试编程题2
前言
这次面试题只有三道纯js的编程题,主要考察了js基础、编程思维。
10分的话,给这套题打个9分吧。竟然没有关于HTML和css的题。
做题过程中,题不难,但是主要靠编程的思维,思路出来了,剩下的就是js的事了。
道题做一半就卡住了。。。 不知该如何实现3个及以上连续时的逻辑。。
先看题目吧…真心不难…
题目
本没打算记录的,所以截图有点粗糙。。将就看吧。
思路
据题可知,
- 首先排序去重并返回到新的数组1中,这个简单,做题的时候用的是比较传统的方法(截图里)。
- 设置三个变量(容器),一个起点start、一个终点end、一个空数组str(用于存放数组中连续元素的起点、终点以及最终数组2)
- 遍历数组1,判断元素是否与下一元素连续
- 是->判断是否已经存在start
- 是->覆盖end的值
- 否->将连续起点赋给start、终点赋给end
- 否->判断是否存在start(或end)
- 是->判断是否是只有两个连续元素
- 是->直接将两个数push进最终容器str中
- 否->用’-‘连接起点与终点,push进容器
- 否->直接将该元素push进容器
- 是->判断是否是只有两个连续元素
- 是->判断是否已经存在start
- 便利完成,用’,’连接成字符串。over~
- 最后,买盒草莓味酸奶奖励一下这个可爱的自己。
代码
1 | var num = [1,2,4,1,6,7,5,5]; |
扩展
若是n不限于1-7的数字
主要解决排序问题,sort函数是根据ascii码排序的,所以在sort里添加一个回调函数作为参数
代码如下1
num = [... new Set(num.sort((a,b) => a - b ))]; //排序 去重 es6是真心简洁,记得有意识地去常用哦
关于去重的编码技巧:new Set()
可能有人知道ES6中提供了新的数据结构 Set,但是能够灵活运用的人或许不多。
使用Set数据结构我们能够轻松的去重一个数组,比如:1
2
3
4 let arr = [1, 2, 2, 3];
let set = new Set(arr);
let newArr = Array.from(set); // Array.from方法可以将 Set 结构转为数组。
console.log(newArr); // [1, 2, 3]
由于Set集合是依赖迭代器实现的,所以可以直接使用展开运算符(…)直接转为数组
代码如下1
2
3let arr = [1, 2, 2, 3];
let newArr = [... new Set(arr)]; // 展开运算符
console.log(newArr); // [1, 2, 3]
关于set集合,涉及es6的迭代器和生成器
参考:
ES6中的迭代器和生成器
总结
- 多看锻炼逻辑思维的编程题
- 习惯并有意识地去使用es6语法
- 好好学习天天向上