for循环中的JavaScript indexOf

时间:2019-03-17 02:07:14

标签: javascript arrays

问题

我编写了一个函数,该函数接受一个数组并返回true 如果该数组第一个元素中的字符串包含该数组第二个元素中字符串的所有字母 。该函数按预期工作,直到["hello", "hey"]作为参数为止。由于数组的第一个元素不包含-1,因此它应该返回"y"。我该如何解决这个问题?

脚本

function mutation(arr) {
 let lower = arr[0].toLowerCase();
 let lower1 = arr[1].toLowerCase();
 let count = 0;

 for (let i = 0; i < lower.length; i++) {
   if (lower.indexOf(lower1[i]) == -1) {
     return false;
   }
   else {
     count += 1;
   }  
  if (count > 0) {
    if (count.legth == lower.legth) {
      return true;
    }
    else {
      return false;
    }
  }
 }
}

结果

mutation(["hello", "hey"]);
true //should return false

arr = ["hello", "hey"];
arr[0].indexOf(arr[1][2]);
-1

4 个答案:

答案 0 :(得分:1)

首先,您拼错了“长度”

 if (count.legth == lower.legth)

第二,这里没有count变量。如果您不希望第一个单词短于第二个单词,只需在开头添加一个检查:

 if(lower.length < lower1.length)

第三,您要根据自己要执行的操作是检查第一个元素是否包含第二个元素的所有字符,但是您在这里所做的实际上完全相反!
我对代码做了一些更改,并对其进行了更正以检查是否正确。

function mutation(arr) {
let first = arr[0].toLowerCase();
let second = arr[1].toLowerCase();

for (let i = 0; i < first.length && i < second.length; i++) {
    if (second.indexOf(first[i]) == -1) {
        return false;
    }
}

return true;
}

此代码无法处理某些边缘情况(例如“ b”和“ baaa”),但如果要处理此类情况,则必须采用其他方法。
让我知道您是否需要其他帮助。

答案 1 :(得分:0)

您的代码中有错字!

//This condition will always be true!
// Change 'legth' to 'length'
if (count.legth == lower.legth) {
  return true;
}

答案 2 :(得分:0)

尽管lower和lower1的长度不同,所以您必须循环遍历lower1,因为lower1和lower1的长度不同,所以找不到lower1 [3]和更大。

function mutation(arr) {
 let lower = arr[0].toLowerCase();
 let lower1 = arr[1].toLowerCase();
 let count = 0;
 for (let i = 0; i < lower1.length; i++) {
   if (lower.indexOf(lower1[i]) == -1) {
     return false;
   } 
 }
 return true;
}

console.log(mutation(["hello", "hey"]));
console.log(mutation(["hello", "hell"]));

答案 3 :(得分:0)

我确实根据上述建议的答案解决了我的问题。这是新代码。

function mutation(arr) {
 let lower = arr[0].toLowerCase();
 let lower1 = arr[1].toLowerCase();
 let found = lower.match('[' + lower1 + ']', 'g');
if ((found.length > lower1.length || lower1.length > found.length)) { 
 for (let i = 0; i < lower1.length; i++) {
   if (lower.indexOf(lower1[i]) == -1) {
     return false;
   }
  }
}
return true;
}

结果

mutation(["hello", "hey"])
false
mutation(["hello", "Hello"])
true
mutation(["zyxwvutsrqponmlkjihgfedcba", "qrstu"])
true
mutation(["Mary", "Aarmy"])
true
mutation(["floor", "for"])
true
mutation(["voodoo", "no"])
false