2016-07-22 11 views
-1

Ich erstelle Koordinatenebene Drei in einer Reihe Spiel, also muss ich herausfinden, ob es drei Zahlen mit dem gleichen Wert in der Reihe, aber ohne Sortierung Array, weil das Array die x-Koordinaten der Punkte darstellt, die während des Spiels zur Koordinatenebene hinzugefügt wurden ... Angenommen, ich habe der Koordinatenebene 6 Punkte hinzugefügt, wobei x-Koordinaten im nächsten Array gespeichert sind:JS Finden Sie Indizes von doppelten Werten im Array, wenn es mehr als zwei Duplikate gibt

var arr = [2,2,3,2,7,3]; 

ich brauche die Schleife, die nur die Vorkommen des Wertes 2, weil die Zahl 2 auftritt 3 mal in Array zählen werden, so sollte die Ausgabe ein neues Array sein (zB Array namens Indizes) mit dem genauen Indizes ... von NMB 2 Vorkommen in arr

indices = [0,1,3] 

Die Schleife „reset“ dafür sollte, wenn bis zum Ende des ARR kommt, wenn die Anzahl des Auftretens von einem Wert von weniger als 3 ...

Ich habe den nächsten Code ausprobiert, aber es funktioniert nicht wie ich oben beschrieben habe, weil es auch die Anzahl der Vorkommen der Zahl 3 zählt ... also wird es nicht zurückgesetzt, wenn die Anzahl der Werte geringer ist als 2 ...

var arr = [2,2,3,2,7,3]; 
var index = []; 
var count = 0; 
var current; 
for(var i = 0;i<arr.length;i++){ 
    current = arr[i]; 
    //------------------------------- 
    for(var j=i+1;j<arr.length;j++){ 
     if(arr[j]===current){ 
      count++; 
      index.push(j); 
      //+++++++++++ 
      if(j===arr.length-1){ 
       if(count<2){ 
        count = 0; 
        index = []; 
        i++; 
       } 
       else{ 
        index.unshift(i); 
        break; 
       } 
      } 
      //+++++++++++ 
     } 
    } 
    //------------------------------- 
} 
alert(index); 

Vielen Dank für jede Hilfe oder Beratung ...

Aleksandra

Antwort

0

Ja, über eine gewisse Logik ...

var arr = [2, 2, 3, 2, 7, 3]; 
 

 
function showDupPos(arr, mindups) { 
 
    mindups = mindups || 2; 
 
    var result = []; 
 
    var positions = {}; 
 
    // collect all positions 
 
    arr.forEach(function(value, pos) { 
 
    positions[value] = positions[value] || []; 
 
    positions[value].push(pos); 
 
    }); 
 
    //check how much of same value in string 
 
    Object.keys(positions).forEach(function(value) { 
 
    var posArray = positions[value]; 
 
    if (posArray.length > mindups) { 
 
     result = result.concat(posArray); 
 
    } 
 
    }); 
 
    return result.sort(); 
 
} 
 
console.log(showDupPos(arr));

+0

zb 'Ich habe gerade Code-Snippet ausgeführt und es funktioniert perfekt! Leider habe ich hier noch nie gepostet, also weiß ich nicht, wie ich deine Antwort oder so ähnlich finden soll ... – Alex

+0

Einfach Daumen hoch und tick die Marke, in der Nähe von Counter –

+0

Ich bin wirklich blöd und habe versehentlich den Pfeil nach unten geklickt neben deiner antwort gibts jetzt -1 oben neben meinem post und wie ich bereits erwähnt habe habe ich hier noch nie gepostet, jetzt weiß ich nicht wie ich diese aktion rückgängig machen kann ?? Danach habe ich mehrmals auf den Pfeil geklickt aber es passiert nichts ... Tut mir leid ... – Alex

0

this is my solution.

var arr = [2,2,3,2,7,3]; 

var dictionary = {}; 
for(var i=0;i<arr.length;i++){ 
    if(dictionary[arr[i]]){ 
    dictionary[arr[i]]++; 
    }else{ 
    dictionary[arr[i]] = 1; 
    } 
} 

for(var num in dictionary){ 
    if(dictionary[num] == 3){ 
    alert(num); 
    } 
} 
+0

Danke für Ihren Vorschlag! Ich habe mich selbst mit dem Schlüssel => Wert-Array versucht und die Ausgabe ist die Anzahl der Vorkommen, aber ich brauche die Indizes dieser Vorkommen im ursprünglichen Array ... – Alex

4

Ich mag diese Art und Weise tun würde


 
var arr = [2,2,3,2,7,3]; 
 

 
var indices = []; 
 

 
arr.filter(function(yourArray, index) { 
 
if(yourArray == 2){ 
 
    indices.push(index) 
 
} 
 
}); 
 
console.log(indices)
, wenn Sie die Indizes drucken wird es diese Ausgabe enthalten [0,1,3]

wenn Sie überprüfen möchten dass es mehr als zwei Duplikate gibt, die du auf diese Weise machen kannst


 

 
var arr = [2,2,3,2,7,3]; 
 
var counts = arr.filter(function(yourArr,index, self){ 
 
    return !self.indexOf(yourArr) 
 
}); 
 

 
var indices = []; 
 

 
arr.filter(function(yourArr, index, self){ 
 
    if(yourArr == 2 && counts.length > 2){ 
 
    indices.push(index) 
 
} 
 
}) 
 
console.log(indices)

+0

Ich glaube nicht, dass OP auf nur 2 überprüfen muss, ich denke für 'var arr = [2,2,3,2,7,3,3];' sollte es '[0, 1, 2, 3 sein , 5, 6] ' –

+0

Vielen Dank für Ihre Mühe und Vorschlag, aber wie im vorherigen Kommentar brauche ich keine Schleife nur für einen bestimmten Wert/Anzahl, aber ich muss durch Array durchlaufen und wenn ein bestimmter (nicht vordefinierter) Wert auftritt 3 oder mehr als 3 Mal, das Ausgabe-Array sollte die Indizes des Vorkommens dieses Wertes im ursprünglichen Array enthalten ... – Alex

+0

Das ist nur die Idee, wie es funktioniert. Sie können Code in Funktion umwandeln und den von Ihnen gewünschten Wert bereitstellen. –

Verwandte Themen