1

我必须将单词分解为 Javascript 中的字母集合。然后我需要能够 i) 检查一个字母是否属于该集合和 ii) 逐步删除该集合的字母。

例如,单词“cool”将被分解为“c”、“o”、“o”、“l”。如果我删除'o'、'a'和'l',我应该只剩下'c'、'o'。

在 Javascript 中实现这一目标的正确数据结构是什么?

4

3 回答 3

4

一串!

var str = 'cool';

要检查一个字符是否在字符串中:

if(str.indexOf('o') > -1) // the character is in the string

要删除第一次出现的字符:

str = str.replace('o','');

如果您想修改字符串对象以提供这些操作的更多“逻辑”表示,您可以这样做:

String.prototype.contains = function(char){
    return this.indexOf(char) > -1;
};
String.prototype.remove = function(char){
    return this.replace(char,'');
};

你可以这样使用:

if ('cheese'.contains('che'))
   alert('Velviva!');

var str = 'hurt'.remove('r');   // 'hut'
    str = 'banana'.remove('n'); // 'baana'
    str = 'happy'.remove('c');  // 'happy'
于 2013-02-05T17:10:41.553 回答
3

数组!您可以通过像这样简单地拆分字符串来获得一个:

var arr = "word".split("");

您可以使用 from 的方法Array.prototype来操作集合,就像您说的那样。例如,要删除 index 处的字符1

arr.splice(1,1);

让它再次成为一个字符串:

arr.join('');

如果您只想从字符串中读取特定字符,则可以直接访问其索引:

var str = "word";
str[1]; // "o"

您还可以使用其他字符串方法来获得与数组相同的结果(请参阅Shmiddty 的回答)。

于 2013-02-05T17:04:10.027 回答
2

JavaScript 的对象可用于此目的,例如:

var cool = "cool".split(""); // `cool` is an array of single-char strings
var crossIndex = {};
cool.forEach(function(entry) {
    crossIndex[entry] = true;
});

现在crossIndex有它是否有给定字母的标志,所以:

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
}
于 2013-02-05T17:06:23.500 回答