最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

Any equivalent of Java collections in Javascript? - Stack Overflow

programmeradmin0浏览0评论

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) and Array, from both of which you can build on more plicated collections. – JayC Commented Feb 5, 2013 at 17:07
Add a ment  | 

3 Answers 3

Reset to default 4

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'

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
}
发布评论

评论列表(0)

  1. 暂无评论