Javascript 数字数组和数字k,返回数组中的任意两个数字加起来是否等于k
我有点困惑这个函数是如何工作的Javascript 数字数组和数字k,返回数组中的任意两个数字加起来是否等于k,javascript,Javascript,我有点困惑这个函数是如何工作的hashMap[k-值]用k在arr中推导2个整数之和的位的精确程度如何?您应该从else块开始读取,然后从if块开始读取 hashMap[k-value]=true所做的是使用数组的当前项value跟踪需要到达k的数字 例如,如果k是11并且当前项值是7,那么hashMap将变成{4:true},这意味着我们正在寻找4(因为7+4==11)。如果下一个值是3,则hashMap变为{4:true,“8:true},这意味着此时我们正在寻找4或8 现在,我们回到if块
hashMap[k-值]
用k在arr
中推导2个整数之和的位的精确程度如何?您应该从else
块开始读取,然后从if
块开始读取
hashMap[k-value]=true
所做的是使用数组的当前项value
跟踪需要到达k
的数字
例如,如果k
是11
并且当前项值是7
,那么hashMap
将变成{4:true}
,这意味着我们正在寻找4
(因为7+4==11
)。如果下一个值
是3
,则hashMap
变为{4:true,“8:true}
,这意味着此时我们正在寻找4
或8
现在,我们回到if
块,该块只检查当前值是否是我们要查找的数字之一(上例中的4
或8
)。如果是这样,我们立即返回true
,因为我们已经找到了两个加起来等于k
的数字,所以不需要继续搜索。请注意,对于循环的第一次迭代,无论如何都不能输入这个if
块,因为hashMap
仍然是一个空的{},作为一个建议,对于这个和任何其他您可能难以理解的相对较小、简单的代码位,请尝试使用示例输入一次运行一行。这通常会向您展示事情是如何工作的——我认为这会帮助您理解,比任何书面解释都要好。感谢您的建议,但我仔细阅读了它,它仍然模糊不清,请在开发工具中亲自尝试。我在每条语句上设置了一个断点。对于数组上的每次迭代(假设之前没有遇到该值,这是第一次迭代的情况),此代码将从k
中减去数组值,并将结果值标记为true
。然后,如果循环随后遇到该结果值,if
检查hashMap[value]
将返回true
,并且算法知道数组中有一个值,当前迭代的值可以与该值组合以生成k
。
findSums(arr, k) {
let hashMap
hashMap = {};
for (let value of arr) {
if (hashMap[value]) {
return true;
} else {
hashMap[k - value] = true
};
}
return false;
}