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

Losowanie liter bez powtórzeń

Object Storage Arubacloud
0 głosów
12,322 wizyt
pytanie zadane 12 lipca 2018 w JavaScript przez demenator23 Nowicjusz (120 p.)
edycja 12 lipca 2018 przez demenator23
var tresc = document.getElementById("litera");
var litery = new Array(22);

litery[0] = "A";
litery[1] = "B";
litery[2] = "C";
litery[3] = "D";
litery[4] = "E";
litery[5] = "F";
litery[6] = "G";
litery[7] = "H";
litery[8] = "I";
litery[9] = "J";
litery[10] = "K";
litery[11] = "L";
litery[12] = "M";
litery[13] = "N";
litery[14] = "O";
litery[15] = "P";
litery[16] = "R";
litery[17] = "S";
litery[18] = "T";
litery[19] = "U";
litery[20] = "W";
litery[21] = "Y";
litery[22] = "Z";

function losowanie(){
	var los = Math.floor(Math.random() *22);
	// litery.splice(0,1);
	document.getElementById("litera").innerHTML = litery[los];	
	if(litery[los] === litery[0]){
		delete litery[0];
		document.getElementById("litera").innerHTML = litery[los];	
	}
	if(litery[los] === litery[1]){
		delete litery[1];
		document.getElementById("litera").innerHTML = litery[los];	
	}
	if(litera.innerHTML === "undefined"){
		document.getElementById("litera").innerHTML = "";


	}

}

Witam. Pisalem skrypt, który losuje litery do "państwa miasta" ale po wylosowaniu np. "A" litera nie jest już powtarzana w dalszym losowaniu - niestety marnie mi to idzie.
Wstawiam opis teraz bo wcześniej cos nie zapisalo :)

1 odpowiedź

+1 głos
odpowiedź 12 lipca 2018 przez Tomek Sochacki Ekspert (227,510 p.)

A gdzie jakaś treść pytania? Mamy się domyślać o co Ci Kolego chodzi?

A tak na marginesie to po co ta linijka:

var litery = new Array(22);

Ona nie tworzy tablicy z 22 elementami... ciekawi mnie to ponieważ ostatnio dość często spotykam taki zapis w JS na tym forum...

komentarz 12 lipca 2018 przez Mariusz08 Maniak (62,300 p.)
Prawdopodobnie pozostałość po C++ ;)
komentarz 12 lipca 2018 przez niezalogowany

ciekawi mnie to ponieważ ostatnio dość często spotykam taki zapis w JS na tym forum...

https://youtu.be/9FVtiJHFCSU?t=46m20s

1
komentarz 12 lipca 2018 przez monika90 Pasjonat (22,940 p.)
A nie można tak po prostu:

var litery = Array.from("AĄBCĆDEĘFGHIJKLŁMNŃOÓPQRSŚTUVWXYZŹŻ")

?
komentarz 12 lipca 2018 przez Tomek Sochacki Ekspert (227,510 p.)

@niezalogowany, ehh... przyznam, że nigdy nie oglądałem tych filmików p. Mirka ale... pozwolę sobie przemilczeć moją opinię... :(

1
komentarz 12 lipca 2018 przez Tomek Sochacki Ekspert (227,510 p.)

@monika90, można tak, albo starszą metodą:

const letters = 'AĄBCĆDEĘFGHIJKLŁMNŃOÓPQRSŚTUVWXYZŹŻ'.split('');

obie są lepsze niż odwoływanie się 35 razy to i-tego indeksu tablicy.

1
komentarz 12 lipca 2018 przez Tomek Sochacki Ekspert (227,510 p.)

Pozwolę sobie obalić mit tworzenia tablic o zadanej długości. Panie Mirku (tak wiem, piszę w eter ale co tam):

const arr1 = Array(5);
arr1; // [empty, empty, empty, empty, empty]

const arr2 = arr1.map( (value, index) => index );
arr2; // [empty, empty, empty, empty, empty]

a jeśli już chcemy robić tablicę o jakieś "startowej" długości to np.:

const arr1 = Array.from({length: 5});

arr1; // [undefined, undefined, undefined, undefined, undefined]

const arr2 = arr1.map( (value, index) => index );
arr2; // [0, 1, 2, 3, 4]

ale nadal nie tworzy to tablicy o długości 5:

const arr1 = Array.from({length: 5});
arr1; // [undefined, undefined, undefined, undefined, undefined]

arr1.push('new value');

arr1; // [undefined, undefined, undefined, undefined, undefined, "new value"]

 

1
komentarz 12 lipca 2018 przez niezalogowany

Albo jeszcze tak:

[..."AĄBCĆDEĘFGHIJKLŁMNŃOÓPQRSŚTUVWXYZŹŻ"]

Jeśli nie potrzebujemy metod obiektu Array, można nawet samego stringa zostawić.

komentarz 12 lipca 2018 przez demenator23 Nowicjusz (120 p.)
Juz dodalem opis, cos wczesniej mi nie zadzialalo :)
komentarz 14 lipca 2018 przez monika90 Pasjonat (22,940 p.)

@Tomek Sochacki,

Pozwolę sobie obalić mit tworzenia tablic o zadanej długości.

W takim razie co to jest długość tablicy w JavaScripcie?

 

komentarz 14 lipca 2018 przez Tomek Sochacki Ekspert (227,510 p.)

@monika90,

po pierwsze musimy pamiętać, że JS to nie Java czy C++. Tutaj długość tablicy to po prostu właściwość obiektu, wskazująca na ilość pół, które my traktujemy jak elementy tablicy. W JS tablica to zwykł obiekty, tyle, że dziedziczy on po Array.prototype. Nie ma tutaj natomiast oddzielnego typu dla tablic.

Załóżmy, że mamy tablicę:

const arr = [1,2,3];
arr.length; // 3

a teraz zróbmy:

arr[10] = 4;

arr.length; // 11

W tym momencie length się zmieniło, bo do tablicy dodaliśmy niejawnie 7 elementów empty (nie undefined).

Length jest więc właściwością obiektu, która określa ilość elementów ale nie można robić głupot jak ta powyżej :)

 

Natomiast nie da się w JS w sposób tak bezpośredni stworzyć tablicy o stałej ilości elementów, z blokadą zmiany tej ilości. Zapis Array(10) w JS nie ma totalnie sensu i szczerze mówiąc na prawdę nie rozumiem dlaczego p. Mirek, który podobno jest też wykładowcą (jak się mylę to mnie poprawcie) promuje takie głupie i bezsensowne zapisy (od nauczycieli mamy chyba prawo wymagać prawidłowego sposobu pisania kodu i nauczania...).

Można by kombinować z tworzeniem obiektu imitującego tablicę, możemy zrobić w tym iterator itp. i ograniczać możliwość wprowadzania większej liczby elementów np. robiąc wlasne metody push itp.ale to wszystko bez sensu. Trzeba po prostu zrozumieć świat JS i z nim żyć :)

Podobne pytania

0 głosów
3 odpowiedzi 799 wizyt
pytanie zadane 28 czerwca 2018 w JavaScript przez Tomasz Ozi Orzech Początkujący (300 p.)
0 głosów
2 odpowiedzi 2,149 wizyt
0 głosów
2 odpowiedzi 472 wizyt
pytanie zadane 7 maja 2019 w C i C++ przez Woocashko Nowicjusz (150 p.)

92,626 zapytań

141,486 odpowiedzi

319,844 komentarzy

62,009 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!

...