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

question-closed Javascript funkcja

VPS Starter Arubacloud
0 głosów
1,264 wizyt
pytanie zadane 16 stycznia 2017 w JavaScript przez shslr Obywatel (1,310 p.)
zamknięte 16 stycznia 2017 przez shslr

Czy moze ktos mi pomoc rozwiazac takie zadanie? Wiem ze nie powinno sie prosic o gotowce ale to juz ostatnie zadanie ktore musze oddac i nie mam pomyslu jak je ugryzc za bardzo.

stwórz tablicę z 10 dowolnymi liczbami (niech kilka będzie takich samych) oraz zmienną ```firstIndex```. W pętli ```for``` sprawdź, która z liczb powatarza się jako pierwsza, przypisz ją do zmiennej ```firstIndex``` i wypisz w konsoli jej indeks.

 var box = [1,1,9,6,4,8,3,7,4];

 var firstIndex =

 for(i=0; i<=firstIndex; i++; ){
   console.log (firstIndex);
 }

 

komentarz zamknięcia: Rozwiazane.

3 odpowiedzi

+2 głosów
odpowiedź 16 stycznia 2017 przez Magicone Nałogowiec (45,100 p.)

Popełniłeś kilka błędów w zadaniu. Tablica ma wewnątrz siebie 9 elementów, a nie 10; zadeklarowana zmienna firstIndex stanowi błąd składniowy w kodzie, a iteracja tablicy najzwyczajniej nie będzie działać, jeśli licznik będziesz porównywał ze zmienną firstIndex.

Zrobimy to w ten sposób: metoda indexOf tablicy z podanym argumentem określa pierwszą pozycję tablicy, zawierającą podany argument, a w wypadku, kiedy jej nie posiada zwraca -1. Pętlę wykonajmy w ten sposób, żeby sprawdzała, czy box.indexOf(i) jest równe i - jeśli tak, to element występuje jako pierwszy (bo indexOf zwraca pierwszą pozycję wartości podanej w argumencie), a jeśli nie, to najzwyczajniej element w tablicy się powtórzył, czyli możesz przypisać zmiennej firstIndex wartość i przerwać pętlę. Dodatkowy mechanizm będzie stanowić początkowa deklaracja zmiennej firstIndex jako -1: w wypadku, kiedy żadna liczba się nie powtórzy zmienna pozostanie bez zmian, przez co łatwo sprawdzić i przechwycić taki wyjątek.

var box = [3, 1, 2, 5, -4, 2, 9, 7, 1, 0];
var firstIndex = -1;

for (var i = 0; i < box.length; i++) {
  var currentValue = box[i];
  var firstElementIndex = box.indexOf(currentValue);

  if (firstElementIndex !== i) {
    firstIndex = firstElementIndex;
    break;
  }
}

if (firstIndex !== -1) console.log('Pierwszy powtarzający się element to:', firstIndex); // 2
else console.log('Elementy nie powtarzają się');

 

komentarz 16 stycznia 2017 przez Fenix Nałogowiec (26,750 p.)
A co jeśli firstIndex bedzie liczba ujemna i do tego -1? W zadaniu nie jest napisane że to liczby dodatnie. Lepiej sprawdzić czy w ogóle jest jakaś wartość przypisana do firstIndex.
1
komentarz 16 stycznia 2017 przez Magicone Nałogowiec (45,100 p.)
Indeks nigdy nie będzie liczbą ujemną, po prostu. Mylisz go z wartością pozycji danej tablicy.
komentarz 16 stycznia 2017 przez Fenix Nałogowiec (26,750 p.)
edycja 16 stycznia 2017 przez Fenix
Edit, jednak miałem racje jeszcze nie czas na sen.

 

http://codepen.io/anon/pen/LxRJrK
komentarz 16 stycznia 2017 przez Comandeer Guru (599,730 p.)
Indeks nie może być ujemny, a w zadaniu chodzi o indeks. Jednak czas na sen ;)
komentarz 16 stycznia 2017 przez Fenix Nałogowiec (26,750 p.)
Macie całkowitą racje, przepraszam za nieporozumienie. :)
+1 głos
odpowiedź 16 stycznia 2017 przez Kornelia Kobiela Nałogowiec (33,340 p.)
1. Stwórz tablicę z 10 dowolnymi elementami. Zrobione

2. Stwórz zmienną firstIndex - stworzyłeś, ale nie przypisałeś wartości początkowej np. 0.

3.Twoja pętla powinna iiterować po elementach tablicy, a tego nie robi. Przyda ci się box.length - który daje nam długość tablicy.

4.W każdym przejściu pętli przypisujesz do firstIndex aktualną wartość z tablicy

5. Teraz potrzebujesz jeszcze if, aby sprawdzić, czy firstIndex jest jeszcze we wcześniejszym miejscu tablicy

6. Jeżeli wartość się powtórzy, to wystarczy wypisać w konsoli wartość, i przerwać pętle.
+1 głos
odpowiedź 16 stycznia 2017 przez Fenix Nałogowiec (26,750 p.)
var box = [1,1,9,6,4,8,3,7,4];
 
var firstIndex;

loop1:
for(var i=0; i<box.length; i++; ){
  loop2:
  for(var j=(i+1);j<box.length;j++){
     if( box[i] == box[j] ){
      firstIndex = box[i];
      break loop1;
    }

  }
}

console.log(firstIndex);

 

komentarz 16 stycznia 2017 przez Comandeer Guru (599,730 p.)

Wow, labels w JS… Tego ficzera się de facto nie powinno wgl używać. Zamiast tego można spokojnie zamknąć całość w funkcji, której wynik wywołania umieści się wewnątrz console.log:

var arr = [ 1, 9, 67, 5, 8, 3, 7, 5, 6, 4 ],
	firstIndex;

function getFirstDuplicate( arr ) {
	var i,
		j,
		current;

	for ( i = 0; i < arr.length; i++ ) {
		current = arr[ i ];

		for ( j = i + 1; j < arr.length; j++ ) {
			if ( current === arr[ j ] ) {
				return i;
			}
		}
	}
}

firstIndex = getFirstDuplicate( arr );

console.log( firstIndex );

 

komentarz 16 stycznia 2017 przez Fenix Nałogowiec (26,750 p.)
Generalnie to masz błąd ponieważ zwracasz index, a nie wartość.
1
komentarz 16 stycznia 2017 przez Comandeer Guru (599,730 p.)

stwórz tablicę z 10 dowolnymi liczbami (niech kilka będzie takich samych) oraz zmienną ```firstIndex```. W pętli ```for``` sprawdź, która z liczb powatarza się jako pierwsza, przypisz ją do zmiennej ```firstIndex``` i wypisz w konsoli jej indeks.

Nie sądzę :P 

Podobne pytania

0 głosów
1 odpowiedź 116 wizyt
pytanie zadane 1 sierpnia 2022 w JavaScript przez Noizz00 Użytkownik (910 p.)
0 głosów
1 odpowiedź 239 wizyt
0 głosów
0 odpowiedzi 104 wizyt
pytanie zadane 21 sierpnia 2023 w JavaScript przez Reapel Początkujący (320 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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!

...