FreeCodeCamp Javascript Challenge [Mutation]我的解决方案出了什么问题?

时间:2016-07-31 23:56:07

标签: javascript

为什么我的解决方案不能应对这一挑战? (挑战链接:https://www.freecodecamp.com/challenges/mutations

 function mutation(arr) {
  var first = arr[0].toLowerCase();
  var second = arr[1].toLowerCase();
  for (var i = 0; i < first.length; i++) {
    if (first.indexOf(second[i]) === -1) {
      return false;
    } else {
      return true;
    } 
  } 
}

mutation(["hello", "hey"]);

2 个答案:

答案 0 :(得分:0)

不需要循环,因为无论如何你的数组大小都是2:

 function mutation(arr) {


     return arr[1].toLowerCase().split('').map((ch)=>arr[0].toLowerCase().indexOf(ch)>=0).every((e)=>e)
}

console.log(
    mutation(["hello","Hello"])
)
console.log(
    mutation(["Alien", "line"])
)
console.log(
    mutation(["hello","hey"])
)

mutation(["Alien", "line"])为例解释代码:

  • arr[1].toLowerCase().split('') =&gt;将line拆分为数组['l','i','n','e']

  • 每个字符的
  • ['l','i','n','e'].map((ch)=>arr[0].toLowerCase().indexOf(ch)>=0),检查它是否存在于第一个元素arr[0] ==&GT;结果将是[true,true,true,true]

  • 在该结果[true,true,true,true].every((e)=>e) ==&gt;中应用与逻辑运算符 true & true & true & true

  • 结果是真的

答案 1 :(得分:0)

您需要While循环优于for循环:

&#13;
&#13;
 function mutation(arr) {
    var j=0,first = arr[0].toLowerCase(),second = arr[1].toLowerCase();
   
    while(j<second.length && first.indexOf(second[j])>=0){
            j++;
     }
     return !(j===second.length-1)
  
}
  //-------- SAMPLES
console.log(
  mutation(["hello", "Hello"])
)

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

console.log(
  mutation(["Alien", "line"])
)
&#13;
&#13;
&#13;