JavaScript Exercise: Find the Number of Unique Letters in a String
Everyone once in a while it's good to complete a fun vanilla JavaScript exercise. One recent exercise I tried was to find the number of occurrences of each letter in specified string. The following was my method.
The JavaScript
/* returns the size/length of an object */
Object.size = function(obj) {
var size = 0;
for(key in obj) {
if(obj.hasOwnProperty(key)) size++;
}
return size;
}
//initial vars
var str = 'hellodavidthisisatestofobjectusage';
var letters = new Object;
//loop, figure it out
for(x = 0, length = str.length; x < length; x++) {
var l = str.charAt(x)
letters[l] = (isNaN(letters[l]) ? 1 : letters[l] + 1);
}
//output count!
for(key in letters) {
console.log(key + ' :: ' + letters[key]);
}
console.log(Object.size(letters));
The Result
h :: 2
e :: 4
l :: 2
o :: 3
d :: 2
a :: 3
v :: 1
i :: 3
t :: 4
s :: 4
f :: 1
b :: 1
j :: 1
c :: 1
u :: 1
g :: 1
16
The above results in 20 letters being found
Have a different solution? Share it!
![5 Ways that CSS and JavaScript Interact That You May Not Know About]()
CSS and JavaScript: the lines seemingly get blurred by each browser release. They have always done a very different job but in the end they are both front-end technologies so they need do need to work closely. We have our .js files and our .css, but...
![Regular Expressions for the Rest of Us]()
Sooner or later you'll run across a regular expression. With their cryptic syntax, confusing documentation and massive learning curve, most developers settle for copying and pasting them from StackOverflow and hoping they work. But what if you could decode regular expressions and harness their power? In...
![CSS pointer-events]()
The responsibilities taken on by CSS seems to be increasingly blurring with JavaScript. Consider the -webkit-touch-callout
CSS property, which prevents iOS's link dialog menu when you tap and hold a clickable element. The pointer-events
property is even more JavaScript-like, preventing:
click actions from doing...
![Add Controls to the PHP Calendar]()
I showed you how to create a PHP calendar last week. The post was very popular so I wanted to follow it up with another post about how you can add controls to the calendar. After all, you don't want your...
This looks like the beginning of a simple javascript word game…you get the letters and amount of times they occur and then have to figure out the string.
Here’s my attempt:
This is probably self explanatory but it goes through and checks if the character is in the “uniq”ue string. If not, it adds it to the end. Then it just determines the length of the unique string, since all characters contained within are… unique. It’s basically the same as yours but it saves having to loop through the object keys just to get a count. I feel like there’s a regex way of doing this but I’m not sure how.
Walsh, u certainly know how to perform the easiest task in the toughest way.
My intention Rakesh was to keep the number of times each appeared — which I now realize I didn’t state. Jonathan’s solution looks great.
My attempt:
It iterates (in reverse) through the string and adds a new property of that character to the returned object. It iterates in reverse because that’s quicker than the alternative – i.e. having to check the length property on every iteration…
I forgot to mention, my function returns a very usable object, constructed like this: { h: 2, e: 4, l: 2, o: 3, etc…. }
Oooh, I like that James.
This is fun. :)
var str = “hellodavidthisisatestofobjectusage”;
var letters = {};
for (var x = 0, y = str.length; x < y; x++) {
letters[str[x]] = letters[str[x]] + 1 || 1;
}
hah! I just realized that the whole thing could be made smaller:
var str = “hellodavidthisisatestofobjectusage”, letters = {};
for (var x = 0, y = str.length; x < y; x++) letters[str[x]] = letters[str[x]] + 1 || 1;
^^b
Nice one keeto, this makes mine smaller too:
Cute one, grigri. Although I forgot I could make mine even shorter:
var str=’thisisultrashortwithregexps’, letters={};
for (var x in str) letters[str[x]] = letters[str[x]] + 1 || 1;
More David! More!
Great solutions everyone! I added the Object.size() to be able to show a result so mine is pretty close to everyone’s.
More in the future?
@Gri: nice use of regex.
I like @grigri, with the correction of \w instead of \S because the OP said ‘letters’ :)
Taking that into account, that’s the solution that most elegantly lets you count letters alone.
This might be a great read:
http://dreaminginjavascript.wordpress.com/2008/08/22/eliminating-duplicates/
Not the same thing, but brilliant as well.
I am currently learning python so I did:
s = ‘thisissomestringwithsomechars’
count = {}
for c in s:
count[c] = count.get(c,0) + 1
print count
Which outputs:
{‘a’: 1, ‘c’: 1, ‘e’: 2, ‘g’: 1, ‘i’: 4, ‘h’: 3, ‘m’: 2, ‘o’: 2, ‘n’: 1, ‘s’: 6, ‘r’: 2, ‘t’: 3, ‘w’: 1}
I m new to javascript.
I want to find no of unique letters in a string using javascript.
pls help me out
Using reduce,