2016-06-21 70 views
0

编辑indexOf():是否有更好的实现方法?

谢谢你们,我的不是我的问题更具体的道歉。 编写此代码是为了检查第二个字符串中的字符是否在第一个字符串中。如果是这样,它会返回true,否则是false。

所以我的代码工作,我知道很多,但我肯定有一个更好的方式来实现这一点。

请记住,这是来自Freecodecamp的Javascript树的编码挑战。

这里是我的代码:

function mutation(arr) { 
 

 
    var stringOne = arr[0].toLowerCase(); 
 
    var stringTwo = arr[1].toLowerCase().split(""); 
 
    var i = 0; 
 
    var truthyFalsy = true; 
 

 
    while (i < arr[1].length && truthyFalsy) { 
 

 
    truthyFalsy = stringOne.indexOf(stringTwo[i]) > -1; 
 
    i++ 
 

 
    } 
 
    console.log(truthyFalsy); 
 
} 
 

 

 

 

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

有一定有更好的方法来做到这一点。我最近了解了map函数,但不知道如何使用它来实现这一点,并且最近才了解到Array.prototype.every()函数,我今晚将阅读它。

对此提出建议?思考?

+0

本来可以更好,有问题 – sathya

+1

来实现这一点 - 这是什么? –

+0

根据您的需要,您应该查看'Array.prototye.some()'和'Array.prototype.every()'方法。如果你想过滤现有的字符,你可能会喜欢'stringTwo.filter(c => stringOne.includes(c))' – Redu

回答

1

这个问题很含糊。然而,我从代码中了解到,你需要检查两个字符串之间的字符串匹配。

既然你知道它的两个字符串,我只是将它们作为两个参数传递。此外,我会改变一段时间为一个for语句,并添加一个休息/继续,以避免使用变量获取和设置。

请注意,在最坏的情况下它几乎相同,但最好的情况是它的一半计算时间。

mutation bestCase 14.84499999999997 
mutation worstCase 7.694999999999993 
bestCase: 5.595000000000027 
worstCase: 7.199999999999989 

// your function (to check performance difference) 
 
function mutation(arr) { 
 

 
    var stringOne = arr[0].toLowerCase(); 
 
    var stringTwo = arr[1].toLowerCase().split(""); 
 
    var i = 0; 
 
    var truthyFalsy = true; 
 

 
    while (i < arr[1].length && truthyFalsy) { 
 

 
    truthyFalsy = stringOne.indexOf(stringTwo[i]) > -1; 
 
    i++ 
 

 
    } 
 
    return truthyFalsy; 
 
} 
 

 

 

 
function hasMatch(base, check) { 
 
    var strOne = base.toLowerCase(); 
 
    var strTwo = check.toLowerCase().split(""); 
 

 
    var truthyFalsy = false; 
 

 
    // define both variables (i and l) before the loop condition in order to avoid getting the length property of the string multiple times. 
 
    for (var i = 0, l = strTwo.length; i < l; i++) { 
 
    var hasChar = strOne.indexOf(strTwo[i]) > -1; 
 
    if (hasChar) { 
 
     //if has Char, set true and break; 
 
     truthyFalsy = true; 
 
     break; 
 
    } 
 
    } 
 
    return truthyFalsy; 
 
} 
 

 
var baseCase = "hello"; 
 
var bestCaseStr = "hey"; 
 
var worstCaseStr = "yap"; 
 

 
//bestCase find match in first iteration 
 
var bestCase = hasMatch("hello", bestCaseStr); 
 
console.log(bestCase); 
 

 
//worstCase loop over all of them. 
 
var worstCase = hasMatch("hello", worstCaseStr); 
 
console.log(worstCase); 
 

 
// on your function 
 
console.log('mutation bestCase', checkPerf(mutation, [baseCase, bestCaseStr])); 
 

 
console.log('mutation worstCase', checkPerf(mutation, [baseCase, worstCaseStr])); 
 

 
// simple performance check 
 
console.log('bestCase:', checkPerf(hasMatch, baseCase, bestCaseStr)); 
 

 
console.log('worstCase:', checkPerf(hasMatch, baseCase, worstCaseStr)); 
 

 
function checkPerf(fn) { 
 
    var t1 = performance.now(); 
 
    for (var i = 0; i < 10000; i++) { 
 
    fn(arguments[1], arguments[2]); 
 
    } 
 
    var t2 = performance.now(); 
 
    return t2 - t1; 
 
}

+0

感谢队友,我对这个问题的模糊性表示歉意;我应该更具体。但是,是的,你确实回答了我的问题,我似乎有更多的阅读:)谢谢。 – Nathan

相关问题