当项目存在时,JS Set.has()返回错误的布尔值

时间:2019-03-26 16:48:33

标签: javascript set

我编写了一个具有基本情况的递归函数,但是由于if语句读取了集合中的值,所以它没有终止。 timestamps.has()始终返回false,即使它“应该”返回true

我无法找到错误,并且想知道我是否在做一些简单的错误操作,例如timestamps变量的作用域,我已经检查了集合中的值和值比较它们,它们实际上是等效的,所以我不确定什么地方出错了。

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];
}

1 个答案:

答案 0 :(得分:1)

您似乎在此处不匹配:

                                extra 's'
                               /
if (timestamps.has(values.times)) continue;
else {
  timestamps.add(values.time);
                            \
                             no 's' here
  ...

取决于您的values对象结构,这可能至关重要。如果这些属性不相等或其中一个不存在,则您的has检查将返回false