Javascript JS Set.has()在存在项时返回假布尔值
我已经编写了一个递归函数,它有一个基本情况,但它没有终止,因为if语句读取集合中的值。timestamps.has始终返回false,即使它应该返回true 我无法追踪这个bug,我想知道我是否做了一些简单的错误,比如timestamps变量的作用域,我已经检查了集合中的值和比较的值,它们实际上是等效的,所以我不确定哪里出了错Javascript JS Set.has()在存在项时返回假布尔值,javascript,set,Javascript,Set,我已经编写了一个递归函数,它有一个基本情况,但它没有终止,因为if语句读取集合中的值。timestamps.has始终返回false,即使它应该返回true 我无法追踪这个bug,我想知道我是否做了一些简单的错误,比如timestamps变量的作用域,我已经检查了集合中的值和比较的值,它们实际上是等效的,所以我不确定哪里出了错 var timestamps; trackFraud = async () => { account = document.getElementById("
var timestamps;
trackFraud = async () => {
account = document.getElementById("account").value;
timestamps = new Set();
await fraudClimb(account, 0);
async function fraudClimb(account, theseTimestamps) {
var [frauds, theseTimestamps] = await findFraudByFromAccount.call(this, account, theseTimestamps);
if (frauds.length == 0) return;
for (var i = 0; i < frauds.length; i++) {
await fraudClimb(frauds[i], theseTimestamps[i]);
}
}
}
findFraudByFromAccount = async (account, timestamp) => {
events = await window.KYCinstance.getPastEvents('ReportedFraudB', { filter: {fromAccount: web3.utils.fromAscii(account)}, fromBlock: 0 });
var frauds = [];
var theseTimestamps = [];
for (let i = 0; i < events.length; i++) {
let values = events[i].returnValues;
if (timestamps.has(values.times)) continue; //THIS LINE IS NEVER FAILING
else {
timestamps.add(values.time);
theseTimestamps.push(values.time);
frauds.push(web3.utils.toAscii(values.fromAccount));
}
}
return [frauds, theseTimestamps];
}
这里似乎有一个不匹配:
extra 's'
/
if (timestamps.has(values.times)) continue;
else {
timestamps.add(values.time);
\
no 's' here
...
根据您的值对象结构,这可能是至关重要的。如果这些属性不相等或其中一个不存在,has检查将返回false。什么是values.times和values.time?