題目:
請在index.html檔案中,編寫arraysSimilar函數,實作判斷傳入的兩個數組是否相似。具體需求:
1. 數組中的成員類型相同,順序可以不同。例如[1, true] 與 [false, 2]是相似的。
2. 數組的長度一緻。
3. 類型的判斷範圍,需要區分:String, Boolean, Number, undefined, null, 函數,日期, window.
當以上全部滿足,則傳回"判定結果:通過",否則傳回"判定結果:不通過"。
這個檔案為testData.js。主要任務是完成arraysSimilar函數。
1、判斷2個參數是否都是數組,不是就傳回false;
2、判斷2個數組長度是否一緻,不是直接傳回fasle;
3、建立2個臨時數組temp1,temp2并初始化為0,用來存放arr1和arr2中各種類型的個數。
var temp1 = [0, 0, 0, 0, 0, 0, 0, 0];
var temp2 = [0, 0, 0, 0, 0, 0, 0, 0];
4、周遊2個arr1和arr2,每周遊一個元素,将對應類型加1。
5、完成arr1和arr2的周遊後,通過temp1.toString()和temp2.toString()是否相等得出2個數組是否相似。
雖然代碼略粗糙,但是功能完成了。網上看了其他人的答案确實不同的人做法不一樣,有些值得借鑒的地方。
建一個類型對象數組obj,初始化為零,arr1周遊時每個元素對應的類型加一,arr2周遊時每個元素對應的類型減一,最終判斷obj裡所有鍵的值都為0即相似數組。
還有一個答案,差不多算标準答案,當然這種題也沒有标準答案。和上個答案的差别是,用map(在js中也就是對象)存放資料類型和次數,這個map初始化為{},在後面動态生成的。
還有一個比較簡潔也好了解的解法
還有一個精妙的解法,我對這種不感興趣,沒仔細看。
本文轉自帥氣的頭頭部落格51CTO部落格,原文連結http://blog.51cto.com/12902932/1926157如需轉載請自行聯系原作者
sshpp