Czy biblioteka Lodash nie wspiera backtick?

Czy biblioteka Lodash nie wspiera backtick?
PK
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:27
0

Działa:

Kopiuj
const array = ['a', 'b', 'c', 'd', 'e', 'f'];
console.log(_.chunk([...array], 2));

Nie działa:

Kopiuj
const array = ['a', 'b', 'c', 'd', 'e', 'f'];
console.log(`Jakiś tekst ${_.chunk([...array], 2)}`);
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:około 3 godziny
  • Postów:8423
2

Jak może nie wspierać backtick, skoro backtick jest na poziomie samego języka?

Tu raczej chodzi o to, że w pierwszym przypadku przekazujesz wynikową tablicę bezpośrednio do console.log (i np. przeglądarka ma szansę to fajnie wyświetlić), a w drugim przypadku używasz template literals (czyli tych backtików), więc konwertuje się ona do stringa zanim dojdzie w ogóle do console.log (więc przeglądarka nie będzie świadoma tego, czy jest tam tablica, obiekt, tylko będzie widzieć string).

BTW ten fragment nie ma wiele sensu:

Kopiuj
[...array]

bo rozciągasz tablicę tylko po to, żeby ją umieścić z powrotem z tablicy.
Wystarczyłoby samo array. No chyba, że ci zależy na zrobieniu kopiii tablicy.


edytowany 2x, ostatnio: LukeJL
Bartosz Wójcik
Jak ja się rozciągam to się rozleniwiam, może to podchodzi pod lazy evaluation i na poziomie JIT jest szybsze?
LukeJL
Nie wiem, co jest szybsze, trzeba by zrobić benchmark (intuicyjnie wersja bez kopiowania powinna być szybsza i bardziej wydajna pamięciowo - ale cholera wie, robią takie optymalizacje, że nie wiadomo, jak to zaimplementowali).Tym niemniej wydajność miałaby znaczenie dopiero na większą skalę, a nie w przypadku OPa, gdzie coś sobie wywołuje po prostu (raz, jak rozumiem, chociaż kto wie, nie widziałem całego kodu).
Patryk27
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
1

Co to znaczy nie działa?


PK
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:27
0

@LukeJL: Dlaczego ...array nie ma sensu? Wtedy nie działa mi metoda tak jak powinna.

Kopiuj
const arrayChunk = ['a', 'b', 'c', 'd', 'e', 'f'];
console.log(_.chunk([arrayChunk], 2)); // [ [ [ 'a', 'b', 'c', 'd', 'e', 'f' ] ] ]
Kopiuj
const arrayChunk = ['a', 'b', 'c', 'd', 'e', 'f'];
console.log(_.chunk([...arrayChunk], 2)); // [ [ 'a', 'b' ], [ 'c', 'd' ], [ 'e', 'f' ] ]

Bez spread operator nie łączy mi w pary po 2 tak jak określiłem.

@Patryk27 Bo wygląda tak

Kopiuj
const array = ['a', 'b', 'c', 'd', 'e', 'f'];
console.log(`Jakiś tekst ${_.chunk([...array], 2)}`); // Jakiś tekst a,b,c,d,e,f

A powinno chyba tak: Jakiś tekst [ [ 'a', 'b' ], [ 'c', 'd' ], [ 'e', 'f' ] ]

edytowany 3x, ostatnio: PanKrakers
Patryk27
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
2

Czyli działa :-)

Kopiuj
const array = ['a', 'b', 'c', 'd', 'e', 'f'];

console.log(array);
console.log(`${array}`);
console.log(array + "");

W pierwszym przypadku console.log() rozumie, że otrzymuje tablicę i wyświetla ją ładnie; w pozostałych zachodzi automatyczna konwersja tablicy na ciąg znaków, która - domyślnie - w przybliżeniu działa tak jak .join(',').

Na przyszłość: nigdy nie pisz suchego "nie działa" (dla każdego znaczy to coś innego) + próbuj zminimalizować swój przykład (zauważ, że koniec końców problem nie jest w żaden sposób powiązany z lodashem).


edytowany 7x, ostatnio: Patryk27
PK
No dobrze, to jak w takim przypadku użyć backticków i tego ładnego wyświetlenia?
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:około 3 godziny
  • Postów:8423
3
PanKrakers napisał(a):

@LukeJL: Dlaczego ...array nie ma sensu? Wtedy nie działa mi metoda tak jak powinna.

Kopiuj
const arrayChunk = ['a', 'b', 'c', 'd', 'e', 'f'];
console.log(_.chunk([arrayChunk], 2)); // [ [ [ 'a', 'b', 'c', 'd', 'e', 'f' ] ] ]

Ale nie chodziło mi, żebyś pakował nazwę zmiennej w nawiasy kwadratowe, tylko, że równie dobrze możesz wywalić nawiasy kwadratowe w ogóle.

Załóżmy, że masz tablicę [10, 20, 30, 40], jeśli dasz trzy kropki, to JS jakby "odpakowuje" każdy element. Można tego użyć np. do kopiowania elementów jednej tablicy i do wrzucenia do drugiej. I to właśnie robisz. Kopiujesz tablicę, ale kopia jest taka sama, więc równie dobrze mógłbyś w tym przypadku po prostu przekazać tę tablicę bez kopiowania (i tym sposobem kod będzie bardziej przejrzysty):

Kopiuj
const arr = [10, 20, 30, 40, 50, 60, 70];
console.log(_.chunk(arr, 2)); // [ [ 10, 20 ], [ 30, 40 ], [ 50, 60 ], [ 70 ] ]

(zaznaczyłem "w tym przypadku", bo owszem, istnieją sytuacje, kiedy kopia tablicy jest konieczna).


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.