I'm sure this could be done on the front end as well as from solidity. I saw a few posts that seemed inefficient, where they are creating a new mapping and storing unnecessary data to the blockchain when the ERC721 package already has the functions it needs in order to procure this information, from my understanding.
Figured out the answer to the first part!!
function ownerOfTokenIds(address tokenOwner) external view returns (uint256[] memory) {
uint256[] memory result = new uint256[](balanceOf(tokenOwner));
uint256 counter = 0;
for (uint256 i = 0; i < tokenCounter; i++) {
if (ownerOf(i) == tokenOwner) {
result[counter] = i;
counter++;
}
}
return result;
}