簡體   English   中英

JavaScript 算法 - 比較兩個字符串參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM