javascript检测两个数组是否相似
JS要比较两个数组是否有相同的元素,即两个数组所有元素都相同,但元素的顺序不一定一致。只就需要先将数组进行排序,再比较两个数组是否相等。
<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml"xml:lang="en">
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
<title>js检测两个数组是否相似</title>
</head>
<body>
<script>
//数组中的成员类型相同,顺序可以不同。例如[1,true]与[false,2]是相似的。
//数组的长度一致。
//类型的判断范围,需要区分:String,Boolean,Number,undefined,null,函数,日期,window.
functionarraysSimilar(arr1,arr2){
//判断边界
if(!(arr1instanceofArray)||!(arr2instanceofArray)){
returnfalse;
}
//判断长度
if(arr1.length!=arr2.length)returnfalse;
vari=0,n=arr1.length,countMap1={},countMap2={},t1,t2,TYPES=['string','boolean','number','undefined',null,'function','date','window'];
for(;i<n;i++){
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;
}
}
functiontypeOf(ele){
varr;
if(ele===null)r='null';
elseif(eleinstanceofArray)r='array';
elseif(ele===window)r='window';
elseif(eleinstanceofDate)r='date';
elser=typeofele;
returnr;
}
for(i=0;i<TYPES.length;i++){
if(countMap1[TYPES[i]]!=countMap2[TYPES[i]])returnfalse;
}
returntrue;
}
document.write(arraysSimilar([1,true],[false,2]));
</script>
</body>
</html>
以上所述就是本文的全部内容了,希望大家能够喜欢。