检查数组索引的一个元素是否等于第二个元素

时间:2016-05-02 13:50:11

标签: javascript arrays

我有一个小脚本,它将检查数组中的一个元素(arr[0])是否等于数组的第二个元素(arr[1])。但是,当它检查以下数组时,我希望它返回false,但它返回true。所以我的问题是,为什么这会返回true,如何修复它以像预期的那样返回false

function mutation(arr) {
  var elem0 = arr[0].toLowerCase();
  var elem1 = arr[1].toLowerCase();

  for(var x=0; x < elem1.length; x++){
    check = elem0.indexOf(elem1[x]);
    if(check === -1){
      return false;
    }
    return true;
  }
}

mutation(["hello", "hey"]); //returns true

4 个答案:

答案 0 :(得分:1)

您快速放置return true

您需要将其放在for语句之后

 function mutation(arr) {
  var elem0 = arr[0].toLowerCase();
  var elem1 = arr[1].toLowerCase();

  for(var x=0; x < elem1.length; x++){
    check = elem0.indexOf(elem1[x]);
    if(check === -1){
      return false;
    }

  }
  return true;
}

mutation(["hello", "hey"]); //returns false

答案 1 :(得分:1)

您正在循环遍历字符串中的字符(请参阅elem1实际上是什么),因此您获得true因为hey的第一个字符,即{{1}确实在字符串h中找到了。

如果要等待它完成对整个字符串的迭代,请使用布尔标志,然后在迭代结束时返回该标志的值。

但是,您似乎只想比较两个元素:

hello

答案 2 :(得分:1)

  

我有这个小脚本,它将检查数组中是否有一个元素   (arr [0])等于数组的第二个元素(arr [1])

它返回true,因为e在元素 hello

您的代码基本上是遍历字符串中的所有字符。

您只需检查

即可
function mutation(arr) {
  return arr[0].toLowerCase() == arr[1].toLowerCase();
}

答案 3 :(得分:1)

这个问题的表达有一些逻辑上的缺陷或者至少有一些缺点。例如给定条件意味着数组中的所有项必须相等。如果是这种情况,那么只需要一小段指令就足够了

myArray.every(e => e == myArray[0])

var a = [1,1,1,1,1,1,1,1],
    b = ["hello", "hey"];

document.write("<pre> a array :" + a.every(e => e == a[0]) + "</pre>");
document.write("<pre> b array :" + b.every(e => e == b[0]) + "</pre>");