检查任意值是否对称

时间:2016-12-12 22:50:31

标签: javascript arrays

任务:

给你一个obj,它可以是3种类型:字符串,数字和数字数组,检查它们是否对称,返回一个布尔值。

实施例

OBJ ="" return true(空字符串应返回true)

obj="1"   return true   (one char should return true)

obj="11"  return true

obj="12"  return false

obj="121" return true

obj=1     return true   (number<10  should return true)

obj=-1    return false  (negative number should return false)

obj=121   return true

**obj=[]    return true  (Empty array should return true)**

**obj=[1]   return true  (an array with one element should return true)**

obj=[1,2,3,4,5]      return false  

**obj=[1,2,3,2,1]      return true**

**obj=[11,12,13,12,11] return true   (left element = right element)**

obj=[11,12,21,11]    return false  (not verify them as a string)

我的代码未能通过大胆的代码,而且我已经尝试解决为什么这么多年了!

这是我的代码:

&#13;
&#13;
function sc(obj){
  var obj2= obj;
  if (obj==="") {
    return true;
  } else if (typeof obj === "string") {
    var revd = obj.split("").reverse("").join("");
    return revd === obj;
  } else if (typeof obj === "number") {
    var revd = parseInt(obj.toString().split("").reverse("").join(""));
    return revd === obj;
  } else if (typeof obj === "object") {
    var obj2 = []
    for (var i = obj.length-1; i >= 0; i--) {
      obj2.push(obj[i])
    }
    return obj==obj2;
  }
}
    
console.log(sc([11,12,13,12,11]));
&#13;
&#13;
&#13;

有人能给我一个关于出了什么问题的提示吗?

3 个答案:

答案 0 :(得分:1)

而不是return obj==obj2;

写下以下内容:

for (var i=0; i<obj.length, i++) {
   if (obj[i] != obj2[i]) { return false; }
}
return true;

答案 1 :(得分:0)

同时向前和向后迭代并检查。

这是一个用c编写的alrothim,很容易转换为C ++。 Checking if an array in C is symmetric (Javascript让生活变得轻松重写JavaScript并使用!=)

答案 2 :(得分:0)

您无法比较这样的数组,因为它们是引用。但是,您可以创建一个函数来比较它们:

function arraysEqual(arr1, arr2) {
    if(arr1.length !== arr2.length)
        return false;
    for(var i = arr1.length; i--;) {
        if(arr1[i] !== arr2[i])
            return false;
    }

    return true;
}

然后像这样使用它:

&#13;
&#13;
function arraysEqual(arr1, arr2) {
    if(arr1.length !== arr2.length)
        return false;
    for(var i = arr1.length; i--;) {
        if(arr1[i] !== arr2[i])
            return false;
    }

    return true;
}


function sc(obj){
  var obj2= obj;
  if (obj==="") {
    return true;
  } else if (typeof obj === "string") {
    var revd = obj.split("").reverse("").join("");
    return revd === obj;
  } else if (typeof obj === "number") {
    var revd = parseInt(obj.toString().split("").reverse("").join(""));
    return revd === obj;
  } else if (typeof obj === "object") {
    var obj2 = []
    for (var i = obj.length-1; i >= 0; i--) {
      obj2.push(obj[i])
    }
    return arraysEqual(obj, obj2);
  }
}

console.log(sc([11,12,13,12,11]));
&#13;
&#13;
&#13;