版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/laohoubin/article/details/46239669
实现判断传入的两个数组是否相似。具体需求:
1. 数组中的成员类型相同,顺序可以不同。例如[1, true] 与 [false, 2]是相似的。
2. 数组的长度一致。
3. 类型的判断范围,需要区分:String, Boolean, Number, undefined, null, 函数,日期, window.
当以上全部满足,则返回"true",否则返回"false"。
/*
*
* 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;
//统计arr1中和arr2中成员类型的个数
var i=0,
n=arr1.length,
//声明对象用来存储类型的个数
countMap1={},
countMap2={},
t1,t2,
TYPES=['string','number','undefined','null','function','date','window'];
for(;i<n;i++){
//调用下边自定义的内部函数typeof。获取数组每个成员的类型
t1=typeof(arr1[i]);
t2=typeof(arr2[i]);
//并分别统计成员类型的个数
if(countMap1(t1)){
countMap1[t1]++;
}else{
countMap1[t1]=1;
}
if(countMap2[t2]){
countMap2[t2]++;
}else{
countMap2[t2]=1;
}
}
//内部函数(函数名称可以自定义)
function typeof(ele){
var r;
if(ele===null) r='null';
else if(ele instanceof Array) r='array';
else if(ele instanceof Date) r='date'
else if(ele === window) r='window'
else r=typeof ele;
return r;
}
//将上边统计得到的成员类型数量进行比较,如果不一样则数组不相似
for(i=0,n=TYPES.length;i<n;i++){
if(countMap1[TYPES[i]]!==countMap2[TYPES[i]]){
return false;
}
}
//满足条件则相似
return true;
}
慕课网练习:http://www.imooc.com/code/5760
实现判断传入的两个数组是否相似。具体需求:
<span> </span>1. 数组中的成员类型相同,顺序可以不同。例如[1, true] 与 [false, 2]是相似的。
<span> </span>2. 数组的长度一致。
<span> </span>3. 类型的判断范围,需要区分:String, Boolean, Number, undefined, null, 函数,日期, window.
<span> </span>当以上全部满足,则返回"true",否则返回"false"。