Solidity
無法通過 web3 訪問映射內的結構內的數組
以下是我的智能合約中的一些相關程式碼片段
struct Constituency{ uint16 id; string name; uint64[] cans; } mapping(uint => Constituency) public constituencies; function newConstituency(string memory _name) private{ uint64[] memory tmp; constituencies[concount] = Constituency(concount, _name, tmp); concount++; } constructor() public{ newConstituency("Bikini Bottom"); constituencies[0].cans = [1,2,3]; }
這是我用來訪問選區映射中的元素的 web3 片段:
election.methods.constituencies(0).call({from : defaultAccount},function(e,r){ console.log(r) })
這是它給出的響應:
Result { '0': '0', '1': 'Bikini Bottom', id: '0', name: 'Bikini Bottom' }
如您所見,它根本沒有提到數組。我能做些什麼來解決這個問題?
你必須製作自己的getter函式。Web3 無法處理這樣的二維數組返回。這是您需要的:
function getConstituency(uint _id) external view returns (uint, string memory, uint64[]) { return (constituencies[_id].id, constituencies[_id].name, constituencies[_id].cans); }
但是還有一件事:我將根據您提供的程式碼向您展示一個範例,但是您真的應該擺脫
id
結構內部。這是多餘的,因為它與用於映射的數字相同,並且選區在數組中的位置相同。它只是用完儲存而無需。希望能幫助到你!