簡體   English   中英

Function 根本沒有返回任何東西,但 console.log 會返回一些東西

[英]Function not returning anything at all but console.log returns something

我正在嘗試在 js 中運行這個 function,這個 function 應該檢查字符串是否有任何重復的字母,如果有則返回 false,如果沒有則返回 true,但它不返回任何內容。 我正在嘗試比較兩個字符串並基於此返回 true 或 false。

 function isIsogram(str) { let str1 = str.toLowerCase().split(""); //console.log(str.toLowerCase()) let str2 = [] for (let i = 0; i < str1.length; i++) { //console.log(str1[i]) if (str2.indexOf(str1[i]) === -1) { str2.push(str1[i]) } } //console.log(str2) if (str2 === str1) { return true; } else return false; } console.log(isIsogram("abba"))

您可以嘗試使用以下內容:

 function hasRepeatedChar(text){ 
     return text.split("").some(
            function(v,i,a){
                return a.lastIndexOf(v)!=i
            }
     );
 }

這個答案很好地解釋了它: 檢查字符串中的重復字符 Javascript

我認為你可以像這樣優化你的算法:

 function isIsogram(str) { let foundChars = []; for (let i = 0; i < str.length; i++) { const char = str[i]; if (foundChars.includes(char)) { return false; } foundChars.push(char); } return true; } console.log(isIsogram("ab")); console.log(isIsogram("abba"));

不能簡單地比較兩個 arrays。 但是您可以先將它們加入字符串,然后進行比較。

 function isIsogram(str) { let str1 = str.toLowerCase().split(""); let str2 = [] for (let i = 0; i < str1.length; i++) { if (str2.indexOf(str1[i]) === -1) { str2.push(str1[i]) } } if (str2.join('') === str1.join('')) { return true; } else return false; } console.log(isIsogram("abba"))

此外,我為您提供了一個更簡單的解決方案,即利用Set

 function isIsogram(str) { return new Set(str.split('')).size === str.length } console.log(isIsogram("abba"), isIsogram("abc"))

您正在嘗試使用str2 === str1將兩個 arrays 與其中的字符進行比較。 不幸的是,嚴格相等運算符===旨在比較原始類型,如字符串或數字 NOT arrays。

在您的代碼中,最快的解決方案是使用 join 方法將str1str2都轉換為字符串,然后像str2.join('') === str1.join('')比較它們。

在此處閱讀有關 javascript 中的相等性檢查的更多信息以及此處有關連接方法的更多信息

PS - 這不是最好的/最優的方法,但足夠簡單,可以開始。

我認為這有效:

 function isIsogram(str) { let str1 = str.toLowerCase().split(""); let str2 = []; for (let i = 0; i < str1.length; i++) { if (str2.indexOf(str1[i]) === -1) { str2.push(str1[i]); } else{ return false; } } return true; } console.log(isIsogram("abba"));

暫無
暫無

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

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