JS Set.has () возвращает ложное логическое значение, когда элемент присутствует - PullRequest
0 голосов
/ 26 марта 2019

Я написал рекурсивную функцию с базовым регистром, но она не завершается из-за оператора 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 Ответ

1 голос
/ 26 марта 2019

Похоже, у вас здесь несоответствие:

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

В зависимости от вашей values структуры объекта, это может иметь решающее значение. Ваша проверка has вернет false, если эти свойства не равны или если одно из них не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...