为了账号安全,请及时绑定邮箱和手机立即绑定

习题代码只输出了第一个case判断结果,后面的就没出来了???

//img1.sycdn.imooc.com//59eeef760001a63206090773.jpg

问题如题目,是什么原因呢??求大神帮帮忙~~

正在回答

3 回答

for循环里面的i、j不加var关键字,则为全局变量,到case2时这个i==case1.arr1.length

0 回复 有任何疑惑可以回复我~

思路是判断两个数组中每种类型的元素个数相同则判断数组相似 

function arraysSimilar(x, y) {

  // 判断是否都是数组
  if (!x instanceof Array || !y instanceof Array) {
    return false;
  }

  // 判断数组长度是否一致
  if (x.length != y.length) {
    return false;
  }


  // 获取数组元素的具体类型 , 按要求分类
  // 如果每种类型的元素个数相同则判断数组相似
  types_of_x = getTypes(x);
  types_of_y = getTypes(y);
  // console.log(getTypes(x))

  // 对这两个数组的类型进行比较, 如果某个类型的元素个数不同则直接false
  result = true

  for(k in types_of_x) {
    if(types_of_x[k] != types_of_y[k]){
      result = false ;
      // console.log( k + " elements count not equal");
      break;
    }
  }

  return result;
}

function getTypes(target) {
  types_of_target = {
    "number": 0,
    "string": 0,
    "boolean": 0,
    "undefined": 0,
    "function": 0,
    "null": 0,
    "date": 0,
    "array": 0,
    "other": 0,
  }

  //target 是数组, 直接用map遍历
  //typeof 返回的是基本数据类型(string, boolean ,number,undefined,) + function + object
  //object 需要单独拿出来,除object需要进一步instanceof外 , 其他都只需要typeof即可

  target.map(function (element) {
    //对象类型
    if (typeof(element) == "object") {
      // 对基本类型 null 进行单独处理, 因为typeof(null) 的输出是object
      if (element == null) {
        return types_of_target['null']++;
      }

      //判断对象类型的, 具体类别
      if( element instanceof Date) {
        return types_of_target["date"] ++ ;
      }

      //数组类型
      if( element instanceof Array ) {
        return types_of_target["array"] ++;
      }

      //如果不是以上类型 , 则是其他对象类型
      return types_of_target["others"] ++;

    } else
    {

      //除对象类型外 , 基本类型(除null外), 还有function 类型, 直接赋值

      type = typeof (element)
      // console.log("element " + element + " type is "+ type)
      if (!types_of_target[type]) {
        types_of_target[type] = 1;
      } else {
        types_of_target[type]++;
      }
    }

  })

  return types_of_target;

}

arr_1 = [1, true, new Date(), undefined, function fun() {
}, [1, 2, 3], false, "yes"];

arr_2 = [false, 2, "no", 45, 67, 89, true, 1]

arr_3 = [false, 20, "yes", 45, 67, 79, 1,false]

console.log(arraysSimilar(arr_2, arr_3));

console.log(arraysSimilar(arr_1, arr_3));


0 回复 有任何疑惑可以回复我~

哪里有case呀。。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

习题代码只输出了第一个case判断结果,后面的就没出来了???

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信