JavaScript 算法 - 比较两个字符串参数

标签 javascript arrays conditional-statements

我正在做这个算法练习,除了这个条件的目的之外,我明白一切:

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 >.

关于JavaScript 算法 - 比较两个字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59574656/

相关文章:

javascript - 检测一个单词并将Class添加到正文

javascript - JS Amcharts - 图例的响应式重新定位位置

javascript - 动态内容和爬虫

javascript - 用于循环更改值的对象数组与数组重建

iOS 将文件行读入数组

performance - 当前 CPU 的成本更高 : arithmetic operations or conditionals?

c++ - 在没有循环/条件的情况下将字符串检查为 int 错误

javascript - 使用动态集合/模型进行并行查询

arrays - 在vuejs中正确显示 "created_at"字段

java - Apache Velocity IncludeTool - 条件包含