Wie rufe ich die Länge des Arrays ab, das in der Zuordnung am Frontend gespeichert ist?

Ich habe einen Vertrag mit folgendem Mapping:

mapping (uint16 => uint256[]) public barLengthToBarIndexForSale;

Was ist der beste Weg, um die Länge eines Arrays für einen bestimmten Schlüssel am Frontend mit Truffle abzurufen?

Etwas wie das...

barERC721Inst.barLengthToBarIndexForSale(5).length;

... scheint nicht zu funktionieren.

Verwenden einer zusätzlichen Funktion in meinem Vertrag, um die Länge abzurufen ...

    function getBarLengthToBarIndexForSaleLength(uint16 _length) external view returns (uint) {
    return barLengthToBarIndexForSale[_length].length;
}

...scheint auch nicht zu funktionieren :(

Ich habe versucht, es im Frontend so aufzurufen:

barERC721Inst.barLengthToBarAmtForSale.call(5)

Und

barERC721Inst.barLengthToBarAmtForSale(5)

beide werfen Fehler.

Jede Hilfe ist willkommen.

Ihr zweiter Ansatz sollte gut funktionieren. Das einzige, was ich ändern würde, ist der Name des Eingabearguments - from _lengthto _index. Ansonsten müssen Sie erklären, was genau "auch nicht zu funktionieren scheint".

Antworten (1)

Sie könnten einfach eine Getter-Funktion in Ihren Vertrag schreiben, die die Länge des Arrays zurückgibt. Machen Sie es unbedingt view.

function getSize(uint16 key) public view returns (uint){
    return barLengthToBarAmtForSale[5].length
}

Wenn dies nicht möglich ist (der Vertrag ist bereits bereitgestellt), können Sie "versuchen", das Array zu durchlaufen (es kostet kein Gas), bis Sie eine Fehlermeldung erhalten. Das ist ein bisschen unsauber, sollte aber funktionieren.

Ich hoffe es hilft.