Wpis z mikrobloga

#javascript

robie zadanie z freecodecampa:
https://www.freecodecamp.com/challenges/seek-and-destroy

mam taki kod:

function destroyer(arr)
{
arr.filter(function(elm)
{
if(elm === arguments[1] || arguments[2])
{
arr.push(elm);
}
});
return arr;
}

destroyer([1, 2, 3, 1, 2, 3], 2, 3);

czemu zwraca mi to [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3] (1, 1 nie powinno tutaj byc?) a nie: [1, 2, 3, 1, 2, 3, 2, 3, 2, 3]
  • 3
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Krawdg: niepoprawnie używasz metody filter. Ona iteruje po jakiejś tablicy(u Ciebie arr) i zwraca nową tablicę z elementami, które spełniają warunek filtra. Powinieneś w funkcji function(elm) zwracać true dla tych elementów, które chcesz zachować w nowej tablicy, a false dla tych, które chcesz odrzucić. Sama funkcja filter zrobi za Ciebie .push()
  • Odpowiedz
@Krawdg: wiele błędów z tą funkcją, jeśli już używasz filter() to powinieneś zwracać boolean w callbacku, druga rzecz to używanie arguments wewnątrz funkcji filter, złe uzycie ponieważ zbierasz argumenty z tej funkcji a nie funkcji destroyer, powinieneś zapisać sobie argumenty do zmiennej przed użyciem filter. Trzecie sprawa to nie zwracasz przefiltrowanej tablicy, to return arr nic nie daje ponieważ filter tworzy nową tablice a ty jej nie zwracasz, wiec albo
  • Odpowiedz