簡體   English   中英

indexOf():是否有更好的方法來實現呢?

[英]indexOf() : is there a better way to implement this?

編輯

謝謝你們,我對我的問題沒有更具體表示歉意。 編寫此代碼是為了檢查第二個字符串中的字符是否在第一個字符串中。 如果是這樣,它將返回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()函數,今晚我將閱讀該函數。

有什么建議嗎? 有什么想法嗎?

這個問題很模糊。 但是我從代碼中了解的是,您需要檢查兩個字符串之間的字符串匹配。

既然您知道它的兩個字符串,我就將它們作為兩個參數傳遞。 另外,我會將while更改為for語句,並添加一個break / continue以避免使用變量get和set。

請注意,在最壞的情況下,它幾乎是相同的,但在最好的情況下,它是一半的計算時間。

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; } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM