• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+1 głos
767 wizyt
pytanie zadane 30 marca 2022 w JavaScript przez kolusnk Początkujący (310 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 2022 przez VBService Ekspert (255,840 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 2022 przez VBService Ekspert (255,840 p.)
wybrane 30 marca 2022 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 2022 przez antypop Mądrala (5,730 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 2022 przez kolusnk Początkujący (310 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 2022 przez kolusnk Początkujący (310 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 2022 przez VBService Ekspert (255,840 p.)
edycja 30 marca 2022 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 2022 przez antypop Mądrala (5,730 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ź 823 wizyt
pytanie zadane 27 listopada 2022 w Java przez sylwka128 Nowicjusz (170 p.)
0 głosów
1 odpowiedź 633 wizyt
pytanie zadane 28 grudnia 2016 w JavaScript przez Boshi VIP (100,240 p.)
+1 głos
0 odpowiedzi 323 wizyt
pytanie zadane 22 kwietnia 2021 w C i C++ przez xTMx3 Obywatel (1,560 p.)

93,103 zapytań

142,077 odpowiedzi

321,562 komentarzy

62,445 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...