首先,不好意思,我昨天偷懶了,沒有更新面試題,今日補上昨日的鍋。
基於上次的對象轉化題目,不少同學指出對象種的數組如果長度不一樣,不能滿足功能,所以針對這個進行優化,代碼如下所示:
<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)
這里需要注意的是:
1.封裝函數的入參類型判斷,並且給出友好的提示,比如警告,或者入參示例
2.使用for in 遍歷對象會遍歷原型鏈,需要我們判斷一下
3.對於遍歷中新生成的數組要判斷是否有沒有
4.開發代碼中調試時,盡量使用console.log()來打印值,減少alert()使用
5.封裝插件要寫好readme,或者在js中寫好注釋
6.可以的化,建議使用包管理,實現安裝操作,即npm發布
進入數組去重的操作,看一下題目
<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>