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