findListElement(objectId, elemId) {
    let index = 0, visible = 0, meta = this.metadata[objectId]
    while (index < meta.length && meta[index].elemId !== elemId) {
      if (!meta[index].deleted) visible++
      index++
    }
    if (index === meta.length) throw new RangeError(`List element not found: ${elemId}`)
    return {index, visible}
  }
Searches for the list element with ID `elemId` in the object with ID `objId`. Returns an object
`{index, visible}` where `index` is the index of the element in the metadata array, and
`visible` is the number of non-deleted elements that precede the specified element.