JavaScript比较数组失败时不应该

时间:2017-06-08 18:57:15

标签: javascript arrays comparison

问题:

  

如果他们各自能够举起的最重的重物相等,则称两只手臂同样强壮。

     

如果他们最强壮的手臂同样强壮(最强壮的手臂可以是右手和左手),那么两个人同样强壮,他们最弱的手臂也是如此。

     

鉴于你和你朋友的武器提升能力,你会发现两个人是否同样强大。

问题:

  

当所有数字相等时,我的解决方案一直显示为false。例如,当>你= [10,15]和朋友= [10,15]时,当它应该为真时我会变错。   当然这是用户错误。 :)

function areEquallyStrong(yourLeft, yourRight, friendsLeft, friendsRight) {
    var you = [yourLeft, yourRight];
    var friend = [friendsLeft, friendsRight];
    you.sort(), friend.sort();
    console.log(you, friend)
    if(you === friend){
        return true;
    }else{
        return false;
    }
}

修正了,谢谢!!

function areEquallyStrong(yourLeft, yourRight, friendsLeft, friendsRight) {
    var you = [yourLeft, yourRight];
    var friend = [friendsLeft, friendsRight];
    you.sort(), friend.sort();
    console.log(you, friend)
    for(var i = 0; i < you.length; i++) {
        if(you[i] !== friend[i])
            return false;
    }

    return true;
}

3 个答案:

答案 0 :(得分:0)

你得到的错误&#39;结果是因为JavaScript中的数组是通过引用而不是通过值进行比较。为了确定两个数组是否包含具有相同值的元素,您应该使用以下方法。

function areArraysEqual(array1, array2) {
  var result = true;
  var length1 = array1.length;
  var length2 = array2.length;
  if (length1 !== length2) {
    return false;
  }
  array1.sort();
  array2.sort();
  for (var i = 0; i < length1; i++) {
    if (array1[i] !== array2[i]) {
      result = false;
      break;
    }
  }
  return result;
}

答案 1 :(得分:0)

您的问题是您尝试将项目列表与另一项目列表进行比较,甚至无需阅读列表中的项目。当你执行===时,你正在比较该项的值,这不能是一个数组,因为它不够聪明,无法循环遍历它们并进行比较(这就是每个存在的原因;) - 所以"10" === "10 = true但["10"] === ["10"] = false

你有一个数组,所以你需要循环并确保元素的每个索引都匹配..我假设你在两个数组中总是有相同的数字,所以你可以做这样的事情:

function areEquallyStrong(yourLeft, yourRight, friendsLeft, friendsRight) {
    var you = [yourLeft, yourRight];
    var friend = [friendsLeft, friendsRight];
    you.sort(), friend.sort();
    console.log(you, friend)
    for(var i = 0; i < you.length; i++) {
        if(you[i] !== friend[i])
            return false;
    }

    return true;
}

答案 2 :(得分:0)

一种方法是将数组转换为JSON对象。这个,有效:

function areEquallyStrong(yourLeft, yourRight, friendsLeft, friendsRight) {
var you = [yourLeft,yourRight];
var friend = [friendsLeft,friendsRight];
you.sort(), friend.sort();
you = JSON.stringify(you);
friend = JSON.stringify(friend);
console.log(you, friend)
if(you == friend){
    return true;
}else{
    return false;
}
}