繁体   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