湫谷Sama
2019-11-02 10:54
<script type="text/javascript"> /* * param1 Array * param2 Array * return true or false * 数组中的成员类型相同,顺序可以不同。例如[1, true] 与 [false, 2]是相似的。这里可以运用sort()进行排序 * 数组的长度一致,这里只要arr1.length=arr2.length * 类型的判断范围,需要区分:String, Boolean, Number, undefined, null, 函数,日期, window. * 这里意在针对每一个值都要精确到以上分类 */ function arraysSimilar(arr1, arr2) { answer = true; //先判断是否是数组,因为大数组的最后三个并不是数组,而是单独的元素 if (arr1 instanceof Array === true && arr2 instanceof Array === true) { if (arr1.length == arr2.length) //先确定数组长度一致 { var arrType1 = [],arrType2 = []; for (var i = 0, len = arr1.length; i < len; ++i) { arrType1[i] = Object.prototype.toString.apply(arr1[i]); arrType2[i] = Object.prototype.toString.apply(arr2[i]); } arrType1.sort(), arrType2.sort(); //对数组进行无差别排序 if (arrType1.toString() != arrType2.toString()) { answer = false; }} else {answer = false} } else {answer = false; //因为看了js里面后三个都是false所以偷了个懒} return answer; } </script>
最后虽然通过了,但是我有两个问题想请教大家;
对于最后三个数据的判断应该如何书写?观察了Typeof、instanceof和Object.prototype.toString:发现都没有很适合,还是说可以这么来,先判断类型是否一致,再判断值是否一致,因为最后一个数组是字符串;
arrType2.toString()这个用法我在百度上查了是不好的用法,有更好的推荐嘛?for循环有点麻烦。对于为什么要对得到类型后的组合进行排序,是因为值就那么多,且在长度相同的情况下,肯定会对应的上的。但这里也存在不严谨,如果真的要十分严谨的话会非常复杂TT
JavaScript深入浅出
281100 学习 · 1020 问题
相似问题