首先,很差意思,我昨天偷懒了,没有更新面试题,今日补上昨日的锅。前端
基于上次的对象转化题目,很多同窗指出对象种的数组若是长度不同,不能知足功能,因此针对这个进行优化,代码以下所示:es6
<script> let obj = { 0: [44, 67], 1: [90, 43, 56], 2: [56, 67, 33], 3: [80, 96, 45] }; function getArr(obj) { if (typeof obj != "object") { console.warn("参数不正确"); return; } const arr = []; // 遍历对象的每个对象 for (var item in obj) { if (obj.hasOwnProperty(item) === true) { // map取对象每个total对应的值取赋值 obj[item].map((i, index) => { if (!arr[index]) { arr[index] = []; } arr[index].push(obj[item][index]); }); } } return arr; } console.log(getArr(obj)); </script>
若是你有不一样的方法,或者更好的方法请来信(email:785784961@qq.com)面试
这里须要注意的是:npm
1.封装函数的入参类型判断,而且给出友好的提示,好比警告,或者入参示例后端
2.使用for in 遍历对象会遍历原型链,须要咱们判断一下数组
3.对于遍历中新生成的数组要判断是否有没有函数
4.开发代码中调试时,尽可能使用console.log()来打印值,减小alert()使用优化
5.封装插件要写好readme,或者在js中写好注释es5
6.能够的化,建议使用包管理,实现安装操做,即npm发布spa
进入数组去重的操做,看一下题目
<script> // 2019-3-5 今日面试题,数组去重 let m = [1, 2, 2], n = [2, 3, 3]; // 返回 m 和n 的不重复的元素,而且按照从小到大排序 let arr = [1,2,3] </script>
这道题的考查点:
1.数组的合并
2.数组排序
3.数组去重
首先咱们进入es6快速实现的过程,定义一个箭头函数,使用new Set 合并数组,再用sort方法去排序,最后Array.from生成新的数组,就能够搞定了
<script> // 2019-3-5 今日面试题,数组去重 let m = [1, 2, 2], n = [2, 3, 3]; // 返回 m 和n 的不重复的元素,而且按照从小到大排序 const func = (m, n) => Array.from(new Set(m.concat(n))).sort((a, b) => a - b); console.log(func(m, n)); </script>
第二种:常规的方法es5
<script> // 2019-3-5 今日面试题,数组去重 let m = [1, 2, 2], n = [2, 3, 3]; // 返回 m 和n 的不重复的元素,而且按照从小到大排序 // 第二种方法 function getArr(m, n) { for (var i = 0; i < n.length; i++) { if (m.indexOf(n[i]) < 0) { m.push(n[i]); } } var arr = []; for (var l = 0; l < m.length; l++) { if (arr.indexOf(m[l]) == -1) { arr.push(m[l]); } } arr = arr.sort(function(x, y) { return x - y; }); return arr; } console.log(getArr(m, n)); </script>
若是降序的话的第二种交互sort中y-x就行了
<script> // 2019-3-5 今日面试题,数组去重 let m = [1, 2, 2], n = [2, 3, 3]; // 返回 m 和n 的不重复的元素,而且按照从小到大排序 // 第二种方法 function getArr(m, n) { for (var i = 0; i < n.length; i++) { if (m.indexOf(n[i]) < 0) { m.push(n[i]); } } var arr = []; for (var l = 0; l < m.length; l++) { if (arr.indexOf(m[l]) == -1) { arr.push(m[l]); } } arr = arr.sort(function(x, y) { return y- x; }); return arr; } console.log(getArr(m, n)); </script>
注意:
1.这里咱们没有判断入参类型,须要调用函数时注意一下,须要是数组类型
2.平常开发中,前端和后端会约定数据类型,通常不会改变类型,因此咱们能够省略类型判断,减小数据处理的时间
3.须要考虑的点,上面数组量数据过大如何处理,如何快速排序
2019-3-6面试题
<script> // 2019-3-6 面试题,时间格式转化 let data= { create_time:'2019-02-05T08:14:28.000Z' }; // 将上面的时间进行格式化,按照入参形式返回一下3种形式 // 第一种 let time1 = '2019-02-05' // 第二种 let time2 = '2019-02-05 08:14:28' // 第三种 let time3 = '2019年02月05日 上午8点14分' // 请在下面函数补充完整 function getTime(time,type){ } </script>