Reputation: 59614
I have to decompose words into collections of letters in Javascript. Then I need to be able to i) check whether a letter belongs to the collection and ii) to remove letters for this collection progressively.
For example, the word 'cool' would be decomposed into 'c', 'o', 'o', 'l'. If I remove 'o', 'a' and 'l', I should be left with 'c', 'o' only.
What is the proper data structure to achieve this in Javascript?
Upvotes: 1
Views: 2065
Reputation: 13967
A string!
var str = 'cool';
To check if a character is in the string:
if(str.indexOf('o') > -1) // the character is in the string
To remove the first occurrence of a character:
str = str.replace('o','');
If you want to modify the string object to provide more "logical" representations of these actions you could do this:
String.prototype.contains = function(char){
return this.indexOf(char) > -1;
};
String.prototype.remove = function(char){
return this.replace(char,'');
};
which you could use like this:
if ('cheese'.contains('che'))
alert('Velviva!');
var str = 'hurt'.remove('r'); // 'hut'
str = 'banana'.remove('n'); // 'baana'
str = 'happy'.remove('c'); // 'happy'
Upvotes: 4
Reputation: 71939
An array! You can get one by simply splitting the string like this:
var arr = "word".split("");
You can use the methods from Array.prototype
to manipulate the collection like you said. For example, to remove the character at index 1
:
arr.splice(1,1);
To make it a string again:
arr.join('');
If you just want to read a particular character from a string, you can just access its index directly:
var str = "word";
str[1]; // "o"
There are also other string methods you can use to achieve the same result you'd get with an array (see Shmiddty's answer).
Upvotes: 3
Reputation: 1075119
JavaScript's object can be used for that, for instance:
var cool = "cool".split(""); // `cool` is an array of single-char strings
var crossIndex = {};
cool.forEach(function(entry) {
crossIndex[entry] = true;
});
Now crossIndex
has flags for whether it has a given letter, so:
var letter = "c"; // for instance
if (crossIndex[letter]) {
// It has it
// If you want to remove it:
delete crossIndex[leter];
}
else {
// It doesn't have it
}
Upvotes: 2