![](/img/trans.png)
[英]Check if a string is composed of all unique characters— not equal to operator in JavaScript
[英]Check for characters in a string being unique
我實現了我的算法來檢查傳入的字符串是否唯一。 我覺得我的算法是正確的,但顯然在某些情況下它會給出錯誤的結果。 為什么?
function isUnique(str) { let sortedArr = str.split('').sort(); for (let [i, char] of sortedArr.entries()) { if (char === sortedArr[i + 1]) { return false } else { return true } } } console.log(isUnique('heloworld')) // true
return
立即終止函數,因此只有第一次迭代才會運行for
循環。 相反,您應檢查所有字符是否唯一(如果不是,在循環內return false
),否則在循環結束后return true
:
function isUnique(str) { let sortedArr = str.split('').sort(); for(let [i,char] of sortedArr.entries()) { if(char === sortedArr[i + 1]) { return false } } return true } console.log(isUnique('heloworld'))
但是使用Set
可能會容易Set
,並查看它的大小是否等於字符串的長度:
function isUnique(str) { return new Set(str).size === str.length; } console.log(isUnique('heloworld')) console.log(isUnique('abc'))
請參閱評論,感謝Patrick:如果您需要考慮由多個UCS-2代碼點組成的字符( 𝟙𝟚𝟛😎😜🙃
等),請調用字符串迭代器並檢查它返回的項目數,可以使用spread或Array.from
來完成Array.from
(因為否則, str.length
將不會評估為正確的單個字符數):
function isUnique(str) { return new Set(str).size === [...str].length; } console.log(isUnique('😜')); console.log(isUnique('😜😜'));
只運行for循環中的第一次迭代(因為你總是執行'return')。 相反,您可以使用以下代碼
function isUnique(str, t={}) { return ![...str].some(c=> t[c]=c in t) } console.log('heloworld =>',isUnique('heloworld')); console.log('helo =>',isUnique('helo'));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.