[英]JavaScript algorithm - Comparing two strings parameters
我正在做這個算法練習,我理解除了這個條件的目的之外的一切:
if (magazineObj[word] < 0) noteIsPossible = false
我找不到結果 -1 的任何場景
這個條件的目的是什么?
如果第二個參數包含第一個參數中的所有單詞,則該算法僅返回。 我展示的這段代碼是教師的解決方案。
console.log(solution('aa abc dd', 'aa abc dd aa'))
function solution(noteText, magazineText) {
var noteArr = noteText.split(' ')
var magazineArr = magazineText.split(' ')
var magazineObj = {}
magazineArr.forEach(word => {
if (!magazineObj[word]) magazineObj[word] = 0
magazineObj[word]++
})
var noteIsPossible = true
noteArr.forEach(word => {
if (magazineObj[word]) {
magazineObj[word]--
if (magazineObj[word] < 0) noteIsPossible = false
}
else noteIsPossible = false
})
return noteIsPossible
}
例如:
console.log(solution('aa abc dd', 'aa abc dd aa'))
在上面的這種情況下,它返回 true。 參數 2 包含參數 1 中的所有單詞。
console.log(solution('aa abc dd ee', 'aa abc dd aa'))
在上面的這種情況下,它返回 false。 參數 2 不包含參數 1 中的所有單詞。 缺少“ee”
console.log(solution('aa abc abc dd', 'aa abc dd'))
在上面的這種情況下,它返回 false。 參數 2 不包含參數 1 中的所有單詞。 缺少另一個“abc”。 它必須在參數 2 中包含 2 個 'abc' 才能返回 true
該函數計算每個“單詞”在第一個字符串中出現的次數,結果是這樣的對象{ aa: 1, abc: 1, dd: 1 }
。
然后代碼迭代第二個字符串,如果對象中存在一個單詞,它會從數字中刪除 1。 如果計數器低於 0,則表示第二個字符串中的單詞實例比第一個字符串中的多。
示例: 'aa abc dd aa' 應該產生 - { aa: -1, abc: 0, dd: 0 }
,並且整體結果將為false
。
但是,由於這種情況if (magazineObj[word])
,這實際上不起作用。 當magazineObj[word]
為 0 或undefined
這將被評估為false
,並且永遠不會達到-1
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.