Check for characters in a string being unique
return
immediately terminates the function, so only the first iteration if your for
loop will ever run. Instead, you should check for whether all characters are unique (if not, return false
inside the loop), else return true
after the end of the loop:
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'))
But it would probably be a lot easier to use a Set
, and see if its size is equal to the length of the string:
function isUnique(str) {
return new Set(str).size === str.length;
}
console.log(isUnique('heloworld'))
console.log(isUnique('abc'))
See comment, thanks Patrick: if you need to account for characters composed of multiple UCS-2 code points (ðððððð
etc), call the string iterator and check how many items it returns, which can be done with spread or Array.from
(because otherwise, str.length
won't evaluate to the right number of individual characters):
function isUnique(str) {
return new Set(str).size === [...str].length;
}
console.log(isUnique('ð'));
console.log(isUnique('ðð'));