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

question-closed Javascript - liczenie wielokrotnych wystąpień w tablicy

0 głosów
1,409 wizyt
pytanie zadane 9 listopada 2016 w JavaScript przez MatiiTv Gaduła (3,800 p.)
zamknięte 10 listopada 2016 przez MatiiTv

Witam.

Na stackoverflow znalazłem taki kod: 

uniqueCount = ["a","b","c","d","d","e","a","b","c","f","g","h","h","h","e","a"];

var  count = {}; 

uniqueCount.forEach(function(i) { count[i] = (count[i]||0)+1;  });

// count = {"a":3,"b":2,"c":2,"d":2,"e":2,"f":1,"g":1,"h":3}

Ten kod liczy ile jest wystąpień tej samej wartości tablicy. Jak zrobić, 'count' zawierało same wartości, które się duplikują? 

Pozdrawiam.

komentarz zamknięcia: Rozwiązane.

1 odpowiedź

0 głosów
odpowiedź 9 listopada 2016 przez ScriptyChris Mędrzec (190,190 p.)
wybrane 10 listopada 2016 przez MatiiTv
 
Najlepsza

Na pewno można skrócić ten kod, ale aby obiekt count zawierał tylko duplikaty (czyli, moim zdaniem wartości występujące dokładnie 2 razy) - możesz zrobić to w następujący sposób (poprzez usunięcie wartości, które nie są duplikatami - wtedy zostaną tylko duplikaty):

var notDupes = [];

for ( var key in count ) {
    if ( count.hasOwnProperty( key ) ) {
       if ( count[ key ] !== 2 ) { // jesli wartosc klucza jest inna niz 2 (czyli nie jest duplikatem), to dodaj do tablicy nie zawierajacej duplikaty
          notDupes.push( key );
       }
    }
}

for ( var i = 0, len = notDupes.length; i < len; i++ ) {
   delete count[ notDupes[ i ] ]; // usuwasz z obiektu 'count' klucze, ktore nie zawieraja duplikatow - czyli zostana same duplikaty
}

console.log( count ); // Object {b: 2, c: 2, d: 2, e: 2}

 

2
komentarz 9 listopada 2016 przez Magicone Nałogowiec (45,100 p.)

No strasznie go skróciłeś. xD W logice nie różni się tak samo za dużo, bo tak samo iterujesz do liczenia i usuwania później.

uniqueCount = ["a","b","c","d","d","e","a","b","c","f","g","h","h","h","e","a"];
var  count = {}; 
uniqueCount.forEach(function(i) { count[i] = (count[i]||0)+1;  });

Object.keys(count).forEach(e => {
	if (count[e] === 1) delete count[e];
});

// count = {"a":3,"b":2,"c":2,"d":2,"e":2,"h":3}

 

komentarz 9 listopada 2016 przez ScriptyChris Mędrzec (190,190 p.)

Na pewno można skrócić ten kod

Miałem na myśli moją propozycję kodu :) 

[edit]

Twoja propozycja zostawia też liczbę wystąpień równą 3 - a czy aby słowo "duplikat" nie odnosi się do dokładnie dwóch wystąpień czegoś?

http://sjp.pl/duplikat

Nie, że czepiam się szczegółów, ale skrypt powinien precyzyjnie wykonywać swoje zadanie :)

Chyba wystarczy "u Ciebie" dodać if (count[e] === 1 || count[e] === 3) albo po prostu dać warunek if (count[e] !== 2) , czyli usunąć wszystko co nie jest duplikatem (tak jak ja podałem w swojej propozycji).

Podobne pytania

0 głosów
1 odpowiedź 6,084 wizyt
pytanie zadane 8 listopada 2016 w JavaScript przez MatiiTv Gaduła (3,800 p.)
0 głosów
4 odpowiedzi 4,080 wizyt
0 głosów
1 odpowiedź 3,247 wizyt
pytanie zadane 22 listopada 2016 w C i C++ przez Medium0 Nowicjusz (120 p.)

93,632 zapytań

142,556 odpowiedzi

323,056 komentarzy

63,139 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1851p. - Mariusz Fornal
  13. 1811p. - rafalszastok
  14. 1600p. - Rafał Trójniak
  15. 1588p. - Tomasz Bielak
Szczegóły i pełne wyniki

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

Kursy INF.02 i INF.03
...