Javascript 判断传入的两个数组是否相似
Posted SingSingaSong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript 判断传入的两个数组是否相似相关的知识,希望对你有一定的参考价值。
任务描述:
请在index.html文件中,编写arraysSimilar函数,实现判断传入的两个数组是否相似。具体需求:
1. 数组中的成员类型相同,顺序可以不同。例如[1, true] 与 [false, 2]是相似的。
2. 数组的长度一致。
3. 类型的判断范围,需要区分:String, Boolean, Number, undefined, null, 函数,日期, window.
当以上全部满足,则返回"判定结果:通过",否则返回"判定结果:不通过"。
思路:1.判断两个数组的长度是否相同。否则,返回false
2.定义两个新数组,用来储存 arr1 和 arr2 的各种成员类型
(用到 push()方法和 call()方法,后者在本处的用处是,用Object.prototype.toString方法获得的对象 代替 arr1[i],即最后push到arrType1中的是arr1[i]的成员类型,如Array、num、function等等,而不是原本具体的数据之类的。)
3.排序后,用“==”进行比较。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>判断类型</title> <script> /* * param1 Array * param2 Array * return true or false */ function arraysSimilar(arr1, arr2){ var arrType1=[]; var arrType2=[]; // 判断是否是数组 if(!(arr1 instanceof Array&&arr2 instanceof Array)){ return false; } // 长度是否相同 if(arr1.length!=arr2.length){ return false; } // 判断类型是否相同 for( var i=0; i<arr1.length; i++){ arrType1.push(Object.prototype.toString.call(arr1[i]));//x.call(y)即用x对象代替y对象 arrType2.push(Object.prototype.toString.call(arr2[i])); } if(arrType1.sort().toString()== arrType2.sort().toString()){//sort方法:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。 return "通过"; }else{ return "不通过"; } } </script> </head> <body> </body> </html>
测试样例:
var result=function(){ //以下为多组测试数据 var cases=[{ arr1:[1,true,null], arr2:[null,false,100], expect:true },{ arr1:[function(){},100], arr2:[100,{}], expect:false },{ arr1:[null,999], arr2:[{},444], expect:false },{ arr1:[window,1,true,new Date(),"hahaha",(function(){}),undefined], arr2:[undefined,(function(){}),"okokok",new Date(),false,2,window], expect:true },{ arr1:[new Date()], arr2:[{}], expect:false },{ arr1:[window], arr2:[{}], expect:false },{ arr1:[undefined,1], arr2:[null,2], expect:false },{ arr1:[new Object,new Object,new Object], arr2:[{},{},null], expect:false },{ arr1:null, arr2:null, expect:false },{ arr1:[], arr2:undefined, expect:false },{ arr1:"abc", arr2:"cba", expect:false }]; //使用for循环, 通过arraysSimilar函数验证以上数据是否相似,如相似显示“通过”,否则"不通过",所以大家要完成arraysSimilar函数,具体要求,详见任务要求。 for(var i=0;i<cases.length;i++){ if(arraysSimilar(cases[i].arr1,cases[i].arr2)!==cases[i].expect) { document.write("不通过!case"+(i+1)+"不正确!arr1="+JSON.stringify(cases[i].arr1)+", arr2="+JSON.stringify(cases[i].arr2)+" 的判断结果不是"+cases[i].expect); return false; } } return true; }(); document.write("判定结果:"+(result?"通过":"不通过"));
以上是关于Javascript 判断传入的两个数组是否相似的主要内容,如果未能解决你的问题,请参考以下文章