为什么我的解决方案不能应对这一挑战? (挑战链接: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"]);
答案 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
循环:
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;