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

Funkcja nie zwraca wartości zwróconych z forEach()
goku21
  • Rejestracja:ponad 7 lat
  • Ostatnio:6 miesięcy
  • Postów:91
0

Co jest z tym nodem, mam prosta metode:

Kopiuj
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?

edytowany 2x, ostatnio: Riddle
overcq
  • Rejestracja:prawie 7 lat
  • Ostatnio:minuta
  • Postów:382
0

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


Nie znam się, ale się wypowiem.
Wizytówka
joh­nny_Be_go­od jest mistrzem ‘eskejpowania’ i osadzania.
Haskell
  • Rejestracja:prawie 10 lat
  • Ostatnio:12 miesięcy
  • Postów:4700
0
goku21 napisał(a):

Co jest z tym nodem, mam prosta metode:

Kopiuj
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?


Zaglądali do kufrów, zaglądali do waliz, nie zajrzeli do d**y - tam miałem socjalizm. Czesław Miłosz
edytowany 1x, ostatnio: Haskell
goku21
  • Rejestracja:ponad 7 lat
  • Ostatnio:6 miesięcy
  • Postów:91
0

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

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:minuta
  • Lokalizacja:Laska, z Polski
  • Postów:10073
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

Kopiuj
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);
        });
}    
edytowany 4x, ostatnio: Riddle
goku21
  • Rejestracja:ponad 7 lat
  • Ostatnio:6 miesięcy
  • Postów:91
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.

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:minuta
  • Lokalizacja:Laska, z Polski
  • Postów:10073
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

edytowany 2x, ostatnio: Riddle
goku21
  • Rejestracja:ponad 7 lat
  • Ostatnio:6 miesięcy
  • Postów:91
0

@TomRiddle: Jezeli uzyje find to mi zwroci undefined.

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:minuta
  • Lokalizacja:Laska, z Polski
  • Postów:10073
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ść.

edytowany 1x, ostatnio: Riddle
goku21
  • Rejestracja:ponad 7 lat
  • Ostatnio:6 miesięcy
  • Postów:91
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:

Kopiuj
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...

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:minuta
  • Lokalizacja:Laska, z Polski
  • Postów:10073
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?

goku21
  • Rejestracja:ponad 7 lat
  • Ostatnio:6 miesięcy
  • Postów:91
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.