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>
以上所述就是本文的全部内容了,希望大家能够喜欢。