I have a mapping of list of struct (mapping (address => struct)) I'm having a trouble in how to display all them together in the front end (i'm using React js).
Ethereum Stack Exchange is a question and answer site for users of Ethereum, the decentralized application platform and smart contract enabled blockchain. It only takes a minute to sign up.Sign up to join this community
A mapping is a hash table with every possible key mapped to an instance of an element.
Unlike arrays, this means you can't generate an error by referencing an element that doesn't exist, because they all exist. If nothing was written to a given slot then it will return a zero-ish instance (
false, 0, empty, 0x0).
Also unlike arrays, it's not possible to iterate the keys or find out how many keys exist, because they all exist.
An important advantage of a
mapping is it's ability to access an element by an indentifier in one operation (
O(1)). This is very important for smart contracts.
mapping(address => struct) myMap; // id => struct
So, mappings are very useful, but sometimes we also want to be able to iterate the keys or count them. A common pattern is to use an array to hold the list of mappings that exist.
Have a look at "Mapped Struct with Index" over here: Are there well-solved and simple storage patterns for Solidity?
Hope it helps.
mapping is not an
array. You cannot iterate over it. It's meant for
O(1) operations. Source
If iterating over or simply fetching all known existing
structs, I would suggest the following.
1: Store the
2: If you want key pair associations with
mapping(address => uint256)where
Note: since I do not know your full requirements, there may exist a better strategy. Assess and analyze exactly what your needs are from the smart contract and proceed from there. :)
As Rob mentioned about mapping. If you want to show all the data in the front end the best way would be to store the addresses in a seprate array too. In this way you get list of all the address stored in the mapping.
Second step is to get all the addresses from the array and use the for loop at frontend and retrieve the individual data one by one.