Zadanie z Jquery

0

Witam,

Jestem początkującym programista, staram się o prace do pewnej firmy i za nic nie moge wymyślić rozwiązania na jedno z zadań i tu Was proszę o pomoc.

Treść zadania:

Napisz wyrażenie jQuery, które zwraca ilość elementów listy #simple, których tekst ma przynajmniej pięć znaków. (jeśli potrafisz, wyświetl tę liczbę w konsoli JS).

3

Jak nie umiesz wymyślić rozwiązania dla tak banalnej rzeczy, to się absolutnie jeszcze nie nadajesz do tej roboty:

const result = $('#simple')
  .find('li')
  .filter((index, element) => element.innerText.length >= 5)
  .length;

console.log(`Result: ${result}`);

http://codepen.io/anon/pen/zoNWEy?editors=1011

3
Maciej Cąderek napisał(a):

Jak nie umiesz wymyślić rozwiązania dla tak banalnej rzeczy, to się absolutnie jeszcze nie nadajesz do tej roboty

Myślę, że nie chodzi tu o wymyślanie. Kolega przede wszystkim nie potrafi szukać, a to jest prawdziwy problem.

Do autora wątku: programista może nie znać jakiejś technologii (w tym wypadku jQuery), ale jeżeli nie umie szukać to sobie nie da rady. Trudno chyba o bibliotekę bardziej popularną niż jQuery. Niech Ci to da do myślenia. Dużo ćwicz i pamiętaj o poniższych zasadach:

Jak rozwiązać każde zadanie nie mając pojęcia o danej technologii? Trzeba je podzielić na mniejsze, atomowe czynności.

  1. Jak zwrócić ilość elementów listy o id #simple.
    Count number of list elements jquery

  2. Jak przefiltrować pobrane elementy?
    How to filter elements in jquery?

  3. Jak wyświetlić coś w konsoli?
    How to print to console javascript

1

@Desu Nie do końca się z Tobą zgodzę, ta Twoja lista atomowych czynności pokazuje już konkretne rozwiązanie (to pokazane przeze mnie) - nie wynika to wprost z treści zadania, można je rozwiązać na wiele różnych sposobów, chociażby:

const result = $('#simple li')
  .toArray()
  .reduce((result, current) => current.innerText.length >= 5 ? result + 1 : result, 0);

console.log(`Result: ${result}`);
let result = 0;
$('#simple li').each(function () {
  if ($(this).text().length >= 5) {
    result++;
  }
});

console.log(`Result: ${result}`);

Oba te sposoby nie zawierają punktów 1 i 2 z twojej listy czynności.

Żeby wpaść na któreś z tych rozwiązań trzeba wiedzieć jakie się ma opcje do wyboru, a do tego trzeba prześledzić dokumentację biblioteki, której się używa (i znać język, którego się używa). Autor ma przede wszystkim braki w wiedzy, nie wymyślisz rozwiązania ze składników, których nie znasz.

Dlatego dałem gotowca - jak autor "nie może nic wymyślić" i nie opisał żadnych prób to szkoda mi dla niego czasu na tłumaczenie. W 90% przypadków po prostu oleję taki post (i tak powinienem zrobić i tym razem), ale czasem jak mi rozwiązanie się od razu nasunie to palce za bardzo swędzą :P

0

Jeżeli popatrzysz na to jako całość, to pokazuje już konkretne rozwiązanie, bo właśnie o to w tym chodzi. Pamiętam jak kiedyś stworzyłem takiego potwora:

$('.loadList').each(function () {
    var tmp = $($(this).siblings($($('.showList').children('.toggleList')))).children('.hidden-li');
    var toLoad = tmp.length;
    var load = "Rozwiń (" + toLoad + ")";
    $(this).html(load);
});

Miałem dodać rozwijanie listy elementów. Nie znałem ani jQuery, ani js'a, nie potrafiłem zmienić tego jaki html jest tworzony, bo nie znałem PHP i Zenda. Znałem jedynie HTML, ale rozwiązanie się znalazło. Brzydkie bo brzydkie, ale działało. No i oczywiście zajęło mi to odpowiednio długo. Czy przeczytałem dokumentację? Nie, bo jej nie rozumiałem. Brałem kod z SO i patrzyłem co mnie zbliża do rozwiązania problemu. Oczywiście zadałem kilka głupich pytań tutaj, ale jak mnie dzek69 opieprzył, to się nauczyłem, że się szuka :D

Myślę, że takie nastawienie programisty jest bardzo ważne, w końcu naszym celem jest rozwiązywanie problemów.

Teraz pracuję nad czymś podobnym do generatora memów. Nie znam canvasa, ale w mojej głowie już mam pytania, które doprowadzą mnie do rozwiązania:

  1. Jak narysować na canvasie prostokąt?
  2. Jak coś napisać na canvasie?
  3. Jak działają eventy na canvasie? W jaki sposób mogę dodać element drag na jakiś element?
    itd.

Jeżeli ktoś nie ma żadnej wiedzy to po prostu tych pytań będzie więcej, ale koniec końców dojdzie do rozwiązania. To takie moje 5gr w tej materii :)

0

Problem jest też z formułowaniem pytania. Ja po przeczytaniu czegoś takiego:
Napisz wyrażenie jQuery, które zwraca ilość elementów listy #simple, których tekst ma przynajmniej pięć znaków.
wyobraziłem sobie, że mam się zmieścić w jednym zapytaniu, napisać coś w stylu:

$("#simple > *:cos_tam_dalej_zeby_wyfiltrowalo_przynajmniej_5_znakowe_elementy")

Dopiero jak przeczytałem post @Maciej Cąderek to zajarzyłem, że to wcale nie musi być trudne i że nie trzeba się mieścić w jednym wyrażeniu, żeby rozwiązać ten problem. Jeśli to przeformułować na problem z JS (niż z jQuery/zapytań CSSopodobnych) to rozwiązanie się robi banalne (chociaż patrzę, że to dalej jest jQuery, bo to filter z jQuery, a nie z JS, ale mniejsza o to).

Niestety samo sformułowanie zapytania pod jQuery sugeruje rozwiązania bazujące na jQuery, więc firma szuka programistów jQuery (a nie programistów JavaScript, czy jeszcze lepiej programistów jako takich).

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