Any equivalent of Java collections in Javascript?

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

Answers (3)

Shmiddty
Shmiddty

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

bfavaretto
bfavaretto

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

T.J. Crowder
T.J. Crowder

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

Related Questions