• 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

Object Storage Arubacloud
+1 głos
595 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 (254,490 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 (254,490 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 (254,490 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ź 634 wizyt
pytanie zadane 27 listopada 2022 w Java przez sylwka128 Nowicjusz (170 p.)
0 głosów
1 odpowiedź 472 wizyt
pytanie zadane 28 grudnia 2016 w JavaScript przez Boshi VIP (100,240 p.)
+1 głos
0 odpowiedzi 208 wizyt
pytanie zadane 22 kwietnia 2021 w C i C++ przez xTMx3 Obywatel (1,560 p.)

92,661 zapytań

141,557 odpowiedzi

320,000 komentarzy

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

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!

...