我一直在試圖寫一個字符,它變得混亂!JavaScript程序找到一個字符串中的字符,但沒有在另一個字符串中
假設我有兩個字符串textStart
,textTarget
,我想跟蹤我需要添加和刪除的字符,以便從textStart
爲了產品textTarget
。
例如,如果textStart
= "dude"
和textTarget
= "deck"
,那麼這將需要被添加的字符將是'c'
和'k'
並且將需要被中減去字符將是'u'
和'd'
S的一個。
我在想,我首先需要創建代表textStart
和textTarget
中每個字符數的地圖。
所以我寫了這一點:
var startChars = {};
for (var k = 0, n = textStart.length; k < n; ++k)
{
if (textStart[k] in startChars)
++startChars[textStart[k]];
else
startChars[textStart[k]] = 1;
}
var targetChars = {};
for (var k = 0, n = textTarget.length; k < n; ++k)
{
if (textTarget[k] in startChars)
++targetChars[textTarget[k]];
else
map1[targetChars[k]] = 1;
}
這將使我
startChars['d']
= 2
, startChars['u']
= 1
, startChars['e']
= 1
和
targetChars['d']
= 1
, targetChars['e']
= 1
, targetChars['c']
= 1
, targetChars['k']
= 1
然後我可以創建地圖needAdded
和needRemoved
看起來在上面兩張圖的區別:
var needAdded = {};
var needRemoved = {};
我我不知道如何按照預期填充這些地圖,因爲我不知道如何使用JavaScript遍歷地圖的鍵。不知何故,我需要
needAdded['c']
= 1
, needAdded['k']
= 1
, needRemoved['u']
= 1
, needRemoved['d']
= 1
這就是你們進來幫我結束了。
我希望我已經做得很好,描述了我正在嘗試做什麼以及我迄今爲止如何嘗試做到這一點。我的編程直覺告訴我,我寫了太多的代碼行,並且需要諮詢StackOverflow來尋求幫助。任何方式沒有JQuery或正則表達式優雅地做到這一點?我知道有人會進入這個線程,寫一條1行Regex解決方案或類似的東西。
要循環通過對象使用'for(var key在對象中){}' –
你有什麼反對正則表達式?這不是我認爲這很有用。 –
就「太多的代碼」而言,您可以重構循環以將您的地圖構建爲函數,因此您只需要編寫一次。然後使用'for ... in'作爲@ A.O。建議(也可以堅持在一個函數,因爲你需要循環兩個對象的屬性)。 –