对这个题目仍然存在疑惑,求助!

来源:1-6 编程练习

湫谷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>


写回答 关注

1回答

  • 湫谷Sama
    2019-11-02 10:59:13

    最后虽然通过了,但是我有两个问题想请教大家;

    1. 对于最后三个数据的判断应该如何书写?观察了Typeof、instanceof和Object.prototype.toString:发现都没有很适合,还是说可以这么来,先判断类型是否一致,再判断值是否一致,因为最后一个数组是字符串;

    2. arrType2.toString()这个用法我在百度上查了是不好的用法,有更好的推荐嘛?for循环有点麻烦。对于为什么要对得到类型后的组合进行排序,是因为值就那么多,且在长度相同的情况下,肯定会对应的上的。但这里也存在不严谨,如果真的要十分严谨的话会非常复杂TT

JavaScript深入浅出

由浅入深学习JS语言特性,且解析JS常见误区,从入门到掌握

281112 学习 · 1020 问题

查看课程

相似问题