2013-02-05 16 views
1

我必須將單詞分解成Javascript中的字母集合。然後,我需要能夠i)檢查信件是否屬於收藏集,以及ii)逐步刪除此收藏的信件。例如,'cool'這個詞將被分解爲'c','o','o','l'。如果我刪除'o','a'和'l',我應該只留下'c','o'。JavaScript中的任何Java集合的等價物?

什麼是正確的數據結構來實現這個在Javascript中?

+0

看看在[underscore.string(https://github.com/epeli/underscore.string)庫。 –

+0

您可以在數組和對象之間進行選擇,兩者都有其優點和缺點。 –

+0

一串........ – Shmiddty

回答

3

的字符串!

var str = 'cool'; 

要檢查字符是否在字符串中:如果你想修改字符串的目的是提供

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

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

要刪除字符的第一次出現這些行爲的更多「邏輯」表示可以這樣做:

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' 
+0

我想知道爲什麼有人不會使用爲處理字符組而建立的對象... – aepheus

+0

@aepheus對不對? OP應該可能使用jQuery,因爲它很棒,可以做所有事情。 – Shmiddty

+0

我想說我不知道​​爲什麼有人不會使用字符串對象(即你在這裏建議的方法)。並不是說他們應該使用一些庫對象,甚至是一個數組。爲什麼當你已經有一組具有相關功能的角色時會浪費性能和空間。 – aepheus

3

一個數組!你可以通過簡單地分割字符串,這樣得到一個:

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

您可以使用從Array.prototype方法像你說的操作集合。例如,在指數1刪除字符:

arr.splice(1,1); 

要使其再次字符串:

arr.join(''); 

如果你只是想從一個字符串讀取特定字符,你可以訪問它的指數直接:

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

還有其他字符串方法可以用來實現你會使用數組得到相同的結果(見Shmiddty's answer)。

+0

這並沒有提到他如何測試一個角色是否在「集合」中,他將如何從集合中移除一個角色,或者實際上有用的任何東西...... – Shmiddty

+0

是的,但我可以掃描數組並設置相應的條目爲「」例如。我很開心! – JVerstry

+0

@Shmiddty我認爲這個問題只是要求數據結構。我可以添加一些例子。我也喜歡你的回答,以及你如何解釋我的第一句話:)。 – bfavaretto

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 
} 
+1

關於這一點的好處是你可以使用語法'if(crossIndex中的字母)' – Shmiddty