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

Znalezienie indeksu zdublikowanego elementu w tablicy - JavaScript

+1 głos
78 wizyt
pytanie zadane 30 marca w JavaScript przez kolusnk Początkujący (290 p.)

Jestem początkujący, uczę się w domu z podstaw Javascriptu, znalazłem sobie zadanie które chciałbym rozwiązać by lepiej zrozumieć funkcje i pętle. Zadanie brzmi : 

Stwórz funkcję indexOfRepeatedValue(array). Prześlij do niej tablicę z liczbami które są zapisane w zmiennej numbers.

Stwórz w tej funkcji zmienną firstIndex. W pętli for sprawdź, która z liczb powtarza się jako pierwsza i przypisz jej indeks do zmiennej firstIndex. Następnie wypisz w konsoli tą zmienną – poza pętlą for.

No i powiedzmy, że mam tablicę, która wygląda tak: 

const numbers = [2, 4, 5, 2, 3, 5, 1, 2, 4];

No więc widzę, że powtarza się tutaj liczba 2, a że szukam pierwszego indeksu powtarzającej się liczby to powinienem napisać funkcję tak, żeby zwracała mi firstIndex = 0 bo liczba 2 po raz pierwszy pojawia się pod indexem 0. 

Próbowałem rozwiązać to w ten sposób: 

function indexOfRepeatedValue(array){
    let firstIndex;
    for (let i=0; i < array.length; i++ )
        if (firstIndex.indexOf(array[i]) === -1 && array[i] !== '');
    firstIndex.push(array[i]);
    return firstIndex;
}

indexOfRepeatedValue(numbers);

Przerabiałem to na różne sposoby, ale jakoś nie mogłem dojść do prawidłowego rozwiązania. 

Mógłby ktoś rzucić jakąś podpowiedź ? Zgubiłem się w tym całkiem. 

komentarz 30 marca przez VBService Mędrzec (171,990 p.)

BTW, po if-ie masz średnik

if (firstIndex.indexOf(array[i]) === -1 && array[i] !== '');

który powoduje, że warunek "nic nie robi"

1 odpowiedź

+2 głosów
odpowiedź 30 marca przez VBService Mędrzec (171,990 p.)
wybrane 30 marca przez kolusnk
 
Najlepsza

firstIndex jest zmienną, do której masz przypisać indeks, indexOf wykonaj na przekazanej tablicy,

 

przykład

function indexOfRepeatedValue(array) {
    let firstIndex = -1; // na początek, żadna z liczb w tablicy nie powtarza się
    for (let i=0; i<array.length; i++)
        if (array.indexOf(array[i], i + 1) !== -1 && array[i] != '') {
            firstIndex = i;
            break; // gdy znajdujemy pierwszą powtarzającą się opuszczamy pętle for
        }
    return firstIndex;
}

const numbers = [6, , 5, 8, 2, 4, 3, 5, 1, 2, , 4];

console.log(indexOfRepeatedValue(numbers));

 

array.indexOf(item, start)

 

Parameter Description
item Required.
The string to search for.
start Optional.
The position to start from (default is 0).
komentarz 30 marca przez antypop Mądrala (5,720 p.)

Chodzi o coś takiego?

 

let numbers = [2, 4, 5, 2, 3, 5, 1, 2, 4];

function findDuplicate(arr) {
    let result = arr.filter((item, index) => arr.indexOf(item) !== index);
    return arr.indexOf(result[0]);
}

Możesz też zrobić pętle i zwrócić tablicę wszystkich indeksów zduplikowanych wartości. 

komentarz 30 marca przez kolusnk Początkujący (290 p.)

@VBService, super, zwraca dobre wyniki przy różnych tablicach ;) 

natomiast szczerze mówiąc nie jestem w stanie zrozumieć dlaczego działa

dlaczego firstIndex = -1 ? 

i która część kodu tak na prawdę sprawdza gdzie jest duplikat, domyślam się, że ta: 

(array.indexOf(array[i], i + 1) !== -1 && array[i] != '')

ale co to tak na prawdę znaczy gdyby to przełożyć na "polski" ? 

muszę to sobie przeanalizować skąd się bierze na przykład array[i], i + 1)

 

W każdym razie dzięki za pomoc, może dzięki temu będę w stanie to zakumać! 

komentarz 30 marca przez kolusnk Początkujący (290 p.)

@antypop, Twój kod oczywiście działa, natomiast ja do rozwiązania zadania muszę użyć funkcji a w niej pętli for ;) 

komentarz 30 marca przez VBService Mędrzec (171,990 p.)
edycja 30 marca przez VBService

dlaczego firstIndex = -1 ? 

bo funkcja array.indexOf(...) zwraca -1, gdy nie znajdzie w tablicy szukanej wartości, w zależności, "pod którym" indeksem znajdzie wartość to zwraca albo 0 (zero) ponieważ indeksy w tablicy zaczynają się od 0 albo 1, 2 itd., aż do wartości indeksu długość tablicy array.length minus jeden.

     indeks:        0           1         2          3          4
     tablica:  [ 'jeden', 'dwa', 'trzy', 'cztery', 'pięć' ]
kolejność:        1           2         3          4          5        =   tablica.length  = 5

ta część wyszukuje duplikaty:  array.indexOf(array[i], i + 1) !== -1

komentarz 30 marca przez antypop Mądrala (5,720 p.)
let numbers = [2, 4, 5, 2, 3, 5, 1, 2, 4];



function findDuplicate(arr) {

    let result = arr.filter((item, index) => arr.indexOf(item) !== index);

    for(let x=0; x<result.length;x++) {
        return result[x];
    }

}

I wersja z pętlą for ;)

Podobne pytania

0 głosów
1 odpowiedź 172 wizyt
pytanie zadane 28 grudnia 2016 w JavaScript przez Boshi VIP (100,460 p.)
+1 głos
0 odpowiedzi 70 wizyt
pytanie zadane 22 kwietnia 2021 w C i C++ przez xTMx3 Obywatel (1,320 p.)
+1 głos
3 odpowiedzi 447 wizyt
pytanie zadane 16 kwietnia 2020 w Systemy operacyjne, programy przez Danielek123 Początkujący (250 p.)

88,332 zapytań

136,928 odpowiedzi

305,599 komentarzy

58,601 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...