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

this nie wskazuje na to co chce

Object Storage Arubacloud
0 głosów
308 wizyt
pytanie zadane 1 listopada 2017 w JavaScript przez Marchiew Dyskutant (7,690 p.)

Cześć, może głupie pytanie, ale nie mogę sobie poradzić. Mam coś takiego:

Array.prototype.count = function(a = null) {
    let e = [];

    if(a !== null) {
        ...
    }
    else {
        e = this.forEach(function(g) {
                this.count(g);

            // console.log(g);
        });

        return e;
    }
}

i niestety wyświetla mi komunikat, że "this.count nie jest funkcją" przy this.count(g) w forEachu.

Jak mogę to naprawić? Chce, żeby to this wskazywało na tablicę do której przypiszę tę metodę, a nie jej elementu "g" lub czegokolwiek innego.

komentarz 4 listopada 2017 przez Marchiew Dyskutant (7,690 p.)

No właśnie wiem, że namieszałem haha

Chciałbym utworzyć taką strukturę mniej więcej:

[
   0: ["cos": 2],
   1: ["aha": 3],
   2: ["mleko": 1]
]

Jeśli ma to sens oczywiście, ale na chwilę obecną na nic lepszego nie wpadłem. Kombinuję z pushem:

for(let i=0, j=self.length; i<j; ++i) {
                if(e.count(self[i]) < 1) {
                    e.push( self[i] );

                    console.log( self[i] + ": " + self.count(self[i]) );
                }
            }

i po wyświetleniu w pętli zgadza się:

Nie umiem tego przełożyć na strukturę, którą naskrobałem haha ale debil ze mnie. Biorę się za coś czego nie potrafię zrobić.

 

komentarz 4 listopada 2017 przez ScriptyChris Mędrzec (190,190 p.)
[
   0: ["cos": 2],
   1: ["aha": 3],
   2: ["mleko": 1]
]

Popełniasz ten sam błąd: ["cos": 2] to tablica z błędnym indeksem elementu - jeśli chcesz propertisy z kluczami jako string, to zamiast tablicy powinien być tu obiekt, czyli { "cos": 2 }. Możesz oczywiście iterować po tablicy (a konkretnie po jej propertisach - czyli własnościach, które posiadają obiekty w JavaScript), gdzie indeksami nie są liczby (do tego służy pętla for..in), ale to nie jest naturalne przeznaczenie tablic.

komentarz 4 listopada 2017 przez Marchiew Dyskutant (7,690 p.)

Kurde.

zostaje tylko coś takiego:

[
    0: [
        0: "cos",
        1: 2
    ],

    1: [
        0: "aha",
        1: 3
    ],

    2: [
        0: "mleko",
        1: 1
    ]
]
           

Burzy to mają koncepcję tego, żeby była możliwość posortowania jej alfabetycznie malejąco lub rosnąco albo od największej ilości powtórzeń lub najmniejszej. Trudno i tak jak to wyjdzie to będę zadowolony

EDIT: Można by było pokusić się o zwracanie obiektu, ale nie umiem na nich operować i chyba nie ma tak dużych możliwości jak z tablicami

1
komentarz 4 listopada 2017 przez ScriptyChris Mędrzec (190,190 p.)

Tablica obiektów będzie tutaj ok. Napisałem Ci przykładowy kod na sortowanie rosnące wg alfabetu lub liczby (ustalasz to przez parametr).

Przykładowa struktura:

var structure = [
    { 'cos': 2 },
    { 'aha': 3 },
    { 'mleko': 1 }
];

Funkcje sortujące (tzn. jedna sortuje, a druga rozpakowuje):

function sortStructure( structure, valueType ) { // parametr pierwszy to struktura w formie TABLICY, drugi parametr to typ w postaci stringa (nazywasz słownie "string" lub "number")
	const destructObject = destructByType( valueType ); // przekazujesz typ, otrzymujesz funkcję rozpakowującą z zapamiętanym typem

	return structure.sort( ( currentValue, nextValue ) => {
		const currentValueSortable = destructObject( currentValue ); // przekazujesz obiekt, otrzymujesz rozpakowany klucz lub wartość (w zależności czy chcesz alfabetycznie - klucz, czy numerycznie - wartość)
		const nextValueSortable = destructObject( nextValue ); // j.w.

		if ( currentValueSortable < nextValueSortable ) {
			return -1;
        } else if ( currentValueSortable > nextValueSortable ) {
			return 1;
        }

		return 0;		
    } );
}

function destructByType( type ) { // argumentem <type> powinno być słowne określenie typu wartości - "number", albo "string"
    return ( obj ) => {
        const key = Object.keys( obj )[ 0 ]; // jako, że w Twojej strukturze, obiekty mają jeden property, to pobiera jedyny klucz

        return type === 'string' ? key : obj[ key ]; // jeśli typem jest string, zwraca klucz obiektu, a jesli co innego (czyli np. number) to zwraca wartość
    }
}

Użycie:

sortStructure( structure, 'string' ); // struktura posortowana alfabetycznie
sortStructure( structure, 'number' ); // struktura posortowana numerycznie

Możesz podpiąć funkcję sortStructure pod Array.ptototype, żeby działało na każdej tablicy. Jako ćwiczenie, możesz doimplementować sortowanie malejące i ewentualnie jakieś inne typy danych :)

komentarz 4 listopada 2017 przez Marchiew Dyskutant (7,690 p.)
Takiej odpowiedzi to się nie spodziewałem. Żeś mnie zaskoczył. Dzięki wielkie za wszelkie wyjaśnienia, podpowiedzi i starania. Postaram się już nie pytać o pierdoły haha. Bardzo dużo mi i tak pomogłeś.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 495 wizyt
0 głosów
3 odpowiedzi 394 wizyt
pytanie zadane 26 października 2018 w JavaScript przez turtelian Obywatel (1,760 p.)
+2 głosów
3 odpowiedzi 722 wizyt
pytanie zadane 4 czerwca 2015 w Java przez Dissio Mądrala (5,830 p.)

92,573 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...