• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Warunek logiczny

VPS Starter Arubacloud
0 głosów
259 wizyt
pytanie zadane 30 stycznia 2019 w JavaScript przez Bakr Mądrala (6,850 p.)

Witam,

 

Chciałbym wyświetlać w liście taski, których obiekty nie mają właściwości checked (false) oraz te, które mają właściwość "new". Jaki warunek logiczny należy zastosować?

Poniższe niestety się nie sprawdzają:

!item.checked || item.new
!item.checked ^ item.new

 

komentarz 30 stycznia 2019 przez xmentor Nałogowiec (49,520 p.)
To wydaję się powinno działać, możesz udostępnić swój kod?
komentarz 30 stycznia 2019 przez Bakr Mądrala (6,850 p.)
        <li v-if="!item.checked || item.new" class="todoList__listItem" v-for="item in items.slice(Math.max(items.length - 4, 0))">
          <input v-model="item.checked" type="checkbox" :id="item.id" >
          <label :data-status="item.checked" :for="item.id">
          </label>
          <input class="todoList__listItemInput" type="text" v-model="item.message">
        </li>

Problem pojawia się, gdy nowy task po kliknięciu dostaje wartość checked: true

 

komentarz 30 stycznia 2019 przez ScriptyChris Mędrzec (190,190 p.)

Jeśli item.checked jest wartością falsy, to wyrażenie !item.checked będzie spełnione i druga strona całego warunku (po operatorze OR) nie będzie sprawdzana. Dlatego wydaje mi się, że powinieneś zastosować AND. Czyli

!item.checked && item.new

, co będzie interpretowane tak, że lewa strona ma zwracać wartość falsy i prawa truthy - gdy oba zostaną spełnione, wtedy wyświetlasz co Ci trzeba.

komentarz 30 stycznia 2019 przez Bakr Mądrala (6,850 p.)
W takim wypadku nie bierze pod uwagę obiektów z checked: false i jednocześnie new: false;
komentarz 30 stycznia 2019 przez ScriptyChris Mędrzec (190,190 p.)

Chciałbym wyświetlać w liście taski, których obiekty nie mają właściwości checked (false) oraz te, które mają właściwość "new".

Czyli: item.checked === false && item.new => wyświetli elementy, których property checked ma wartość false i property new jest truthy (przeciwieństwo falsy, wyjaśnienie którego podałem w linku w poprzednim komentarzu).

P.S. Właściwie to określ precyzyjnie, czy masz na myśli brak wartości (undefined), czy wartość false.

komentarz 31 stycznia 2019 przez Bakr Mądrala (6,850 p.)
Przy takim warunki wyświetlane są również obiekty z new=true oraz checked=true, a gdy mają checked true powinny się nie pojawiać
komentarz 31 stycznia 2019 przez ScriptyChris Mędrzec (190,190 p.)

Chyba coś nie bardzo się rozumiemy. :)

Warunek:

item.checked === false && item.new

nie będzie spełniony, gdy item.checked będzie miało wartość true, bo tylko dla false jest ok. Oczywiście prawa strona będzie spełniona dla jakiejkolwiek wartości truthy, którą posiada property item.new.

Wypisz proszę dokładnie wszystkie wartości dla property item.checked oraz item.new, dla których chcesz wypisywać te elementy. Mam przeczucie, że albo ja Cię źle rozumiem, albo Ty coś pomijasz. :)

1
komentarz 1 lutego 2019 przez Bakr Mądrala (6,850 p.)

Zestaw danych:

      [
        {
          id: 1,
          checked: true,
          new: false,
        },
        {
          id: 2,
          checked: false,
          new: false, 
        },
        {
          id: 3,
          checked: false,
          new: true, 
        },
        {
          id: 4,
          checked: true,
          new: true, 
        },
      ]

Powinny się wyświetlić obiekty z id: 1,2

1 odpowiedź

0 głosów
odpowiedź 1 lutego 2019 przez ScriptyChris Mędrzec (190,190 p.)

Skoro chcesz filtrować dane, gdy:

  • item.checked ma wartość true lub false (czyli tylko typ boolean) - tutaj użyłbym operatora typeof
  • item.new ma wartość false - tutaj bez filozofii

, to zapis może być taki:

typeof item.checked === 'boolean' && item.new === false

P.S. Na marginesie - zamiast nazw kluczy checked i new czytelniejszy zapis będzie isChecked oraz isNew (z samodzielnym użyciem słówka new bym uważał, ponieważ jest ono zarezerwowane w JavaScript).

1
komentarz 1 lutego 2019 przez Tomek Sochacki Ekspert (227,510 p.)
const obj = {
  new: '1',
  class: '2'
}
obj.new;   // "1"
obj.class; //"2"

Co ciekawe, słowa zarezerwowane można używać jako nazwy pól obiektów, ale nie jako nazwy zmiennych... ale takie uroki JS :)

Ale oczywiście zgadzam się z Tobą, że nie należy tego stosować, ja nigdy w CR nie przepuszczam tego typu zapisów bo uważam to za duży błąd i niepotrzebne zamieszanie w kodzie...

Podobne pytania

0 głosów
2 odpowiedzi 155 wizyt
pytanie zadane 4 lutego 2016 w JavaScript przez Decol Użytkownik (560 p.)
0 głosów
2 odpowiedzi 167 wizyt
pytanie zadane 11 marca 2021 w SQL, bazy danych przez wsnofi Bywalec (2,680 p.)
0 głosów
1 odpowiedź 370 wizyt
pytanie zadane 10 lutego 2020 w JavaScript przez disaster Bywalec (2,120 p.)

92,455 zapytań

141,263 odpowiedzi

319,100 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...