docs: function isObjectOrArrayEquivalent(firstValue, secondValue, firstStack, secondStack) {
    const firstKeys = Object.keys(firstValue);
    const secondKeys = Object.keys(secondValue);
  
    if (firstKeys.length !== secondKeys.length) {
      return false;
    }
  
    let index = -1;
  
    while (++index < firstStack.length) {
      if (firstStack[index] === firstValue) {
        return secondStack[index] === secondValue;
      }
    }
  
    firstStack.push(firstValue);
    secondStack.push(secondValue);
  
    index = -1;
  
    let key;
  
    while (++index < firstKeys.length) {
      key = firstKeys[index];
  
      /* eslint-disable no-use-before-define */
      if (!isEquivalent(firstValue[key], secondValue[key], firstStack, secondStack)) {
        /* eslint-enable */
        return false;
      }
    }
  
    firstStack.pop();
    secondStack.pop();
  
    return true;
  }