Funkcja nie zwraca wartości zwróconych z forEach()

0

Co jest z tym nodem, mam prosta metode:

getRealSizeOfTransaction(trade, correctTradePair) {
    this.contractList.forEach(el => {
        if(el.name == correctTradePair)
        {
            let quantoMultiplier = Number(el.quantoMultiplier);
            let quantityToDoMultiplierByQuant = trade.quantityToDo / quantoMultiplier; 
            return Math.floor(quantityToDoMultiplierByQuant);
        }
    })
    return 0;
}

I mi zwraca zawsze 0 o co tu #%%^ chodzi?

0

Wewnętrzny return jest wewnątrz strzałkowej funkcji przekazanej do forEach, więc wraca tylko z tej funkcji.

0
goku21 napisał(a):

Co jest z tym nodem, mam prosta metode:

getRealSizeOfTransaction(trade, correctTradePair)
    {
        return this.contractList.forEach(el => {
            if(el.name == correctTradePair)
            {
                let quantoMultiplier = Number(el.quantoMultiplier);
                let quantityToDoMultiplierByQuant = trade.quantityToDo / quantoMultiplier; 
                return Math.floor(quantityToDoMultiplierByQuant);
            }
        })
    }

I mi zwraca zawsze 0 o co tu #%%^ chodzi?

0

aaaaa no tak strzalka gubi thisa ja pier#$^$% dzieki;]

4
goku21 napisał(a):

aaaaa no tak strzalka gubi thisa ja pier#$^$% dzieki;]

What? Nie. Żadnego związku z this to nie ma, ale za to ma z tym że nie rozumiesz jak działa programowanie funkcyjnie.

Jeśli chciałeś zwrócić jakiś element z listy i przeprowadzić na nim operacje to powinieneś użyć .find(). Jeśli wiele to .filter().map().

Strzelam że chodziło Ci o to drugie, więc to powinno wyglądać jakoś tak

getRealSizeOfTransaction(trade, correctTradePair) {
    return this.contractList
       .filter(el => el.name === correctTradePair)
       .map(el => {
            const quantoMultiplier = Number(el.quantoMultiplier);
            const quantityToDoMultiplierByQuant = trade.quantityToDo / quantoMultiplier; 
            return Math.floor(quantityToDoMultiplierByQuant);
        });
}    
0

@TomRiddle: a jesli nic nie zanjdzie to nie zwroci 0 tylko pewnie undefined:> A z ifem wygladaloby to paskudnie :/

Noo mysle po staremu dlatego uzywam zwykle fora.

0
goku21 napisał(a):

@TomRiddle: a jesli nic nie zanjdzie to nie zwroci 0 tylko pewnie undefined:> A z ifem wygladaloby to paskudnie :/

Ty poważny jesteś?

this.contractList to jest array, jak rozumiem. I operacje filter() oraz .map() również działają na arrayu, i array też zwracają. Jeśli nie znajdziesz żadnego przypadku dla którego el.name === correctTradePair to dostaniesz pusty, array czyli []. Co w tym dziwnego?

screenshot-20220205164921.png

0

@TomRiddle: Jezeli uzyje find to mi zwroci undefined.

0
goku21 napisał(a):

@TomRiddle: Jezeli uzyje find to mi zwroci undefined.

Tak, to wtedy musisz po prostu zaprogramować, co Twoja funkcja getRealSizeOfTransaction() powinna zrobić kiedy przekażesz jej listę elementów, w którym żaden z nich nie spełnia kryterium.

Ja bym rzucił wyjątek; ale możesz zrobić bardziej głupie rzeczy jeśli chcesz, typu zwrócić null, 0, -1 albo jakąś inną głupią wartość.

0

@TomRiddle: Nie ma byc wyjatku poniewaz nie ma zadnego bledu. Jezeli jakims cudem nie znajdzie w tablicy szukanego elementu, tzn ze owy element nie istnieje a to oznacza ze ilosc danego elementu wynosi 0 i taka liczba ma sie pojawic.

Napisalem tak:

getRealSizeOfTransaction(trade, correctTradePair)
{
    let el = this.contractList.find(el => el.name == correctTradePair);
    if(el == undefined)
        return 0;
    let quantoMultiplier = Number(el.quantoMultiplier);
    let quantityToDoMultiplierByQuant = trade.quantityToDo / quantoMultiplier; 
    return Math.floor(quantityToDoMultiplierByQuant);
}

Dziala ok ale ten if jest brzydki...

0
goku21 napisał(a):

@TomRiddle: Nie ma byc wyjatku poniewaz nie ma zadnego bledu.

No ja bym się zdziwił gdybym zawołał getRealSizeOfTransaction(trade, "absadashdbhajsbdhasbd") albo getRealSizeOfTransaction(trade, "") i dostał 0. Moim zdaniem ta funkcja w ogóle nie powinna być zawołana z takim correctTradePair którego nie ma w Twojej liście.

No ale jak mówiłem, chcesz zwrócić 0 to zwróć 0.

Jezeli jakims cudem nie znajdzie w tablicy szukanego elementu, tzn ze owy element nie istnieje a to oznacza ze ilosc danego elementu wynosi 0 i taka liczba ma sie pojawic.

Dziwna logika, bo skoro tego elementu nie musi być 1, bo by znaczyło też że może być ich więcej niż 1? I wtedy ogarniesz tylko pierwszy?

W ogóle dziwny jest design tej funkcji, nie chcesz pokazać całej klasy?

0

@TomRiddle: Nie chce:> Moze byc tylko 1. Z reszta na poczatku programu pobiera liste z mozliwymi obiektami, później odwołuje sie tylko do tej listy zeby zaokraglic precyzje. Jezeli jednak ilosci jest mniej niz najmniejsza mozliwa jednostka, metoda powinna zwrocic 0 co jest logiczne moim zdaniem:> Byc moze niedokladnie nazwalem ta metode.

1 użytkowników online, w tym zalogowanych: 0, gości: 1