1. 程式人生 > >javascript判斷陣列是否相似

javascript判斷陣列是否相似

請在index.html檔案中,編寫arraysSimilar函式,實現判斷傳入的兩個陣列是否相似。具體需求:

  1. 陣列中的成員型別相同,順序可以不同。例如[1, true] 與 [false, 2]是相似的。

  2. 陣列的長度一致。

  3. 型別的判斷範圍,需要區分:String, Boolean, Number, undefined, null, 函式,日期, window.

 /*
 * param1 Array 
 * param2 Array
 * return true or false
 */
function arraysSimilar(arr1,
arr2){ // 首先判定是否陣列 if(!(arr1 instanceof Array && arr2 instanceof Array)) return false; // 判斷長度是否一致 if(arr1.length != arr2.length) return false; else if(arr1.length == arr2.length && arr1.length == 0) return true; var arr1Types = getTypes(arr1); var arr2Types =
getTypes(arr2); var arr1TypesCount = Object.keys(arr1Types).length; var arr2TypesCount = Object.keys(arr2Types).length; // 判斷型別個數是否一致 if(arr1TypesCount!=arr2TypesCount) return false; for(var item in arr1Types){ if(!arr2Types[item]) return false; } return true; } function
getTypes(arr){ var types = {}; for(var a1 of arr){ if(typeof(a1)!="object"){ types[typeof(a1)] = typeof(a1); }else{ // 如果是object var temp = Object.prototype.toString.apply(a1); switch(temp){ case "[object Array]": temp = "array"; break; case "[object Function]": temp = "function"; break; case "[object Date]": temp = "date"; break; case "[object Window]": temp = "window"; break; case "[object Undefined]": temp = "undefined"; break; case "[object Null]": temp = "null"; break; case "[object Object]": // 考慮僅為object的情況 temp = "object"; break; } types[temp] = temp; } } return types; }