javascript判斷陣列是否相似
阿新 • • 發佈:2018-11-07
請在index.html檔案中,編寫arraysSimilar函式,實現判斷傳入的兩個陣列是否相似。具體需求:
-
陣列中的成員型別相同,順序可以不同。例如[1, true] 與 [false, 2]是相似的。
-
陣列的長度一致。
-
型別的判斷範圍,需要區分: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;
}