2016-06-21 56 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

相關問題