I have to depose 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 deposed 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?
I have to depose 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 deposed 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?
Share Improve this question asked Feb 5, 2013 at 17:01 Jérôme VerstryngeJérôme Verstrynge 59.7k96 gold badges295 silver badges466 bronze badges 3- Take a look at the underscore.string library. – Vlad Magdalin Commented Feb 5, 2013 at 17:03
- You can choose between arrays and objects, both having their advantages and disadvantages. – Felix Kling Commented Feb 5, 2013 at 17:04
-
Proper? Proper?! It can be done many ways, what's this talk of proper? You have two primitive types,
Object
(which a bit like a dictionary) andArray
, from both of which you can build on more plicated collections. – JayC Commented Feb 5, 2013 at 17:07
3 Answers
Reset to default 4A 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'
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).
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
}
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745238504a4618035.html
评论列表(0条)