2016-07-19 9 views
1

Ich füge die Daten hinzu, die ich von einer URL zum Array Ernten erhalte. Danach suche ich mit Hilfe eines neuen Arrays nach doppelten Ernten cropsSoFar.beste Möglichkeit, nach einer Zeichenfolge in einem Array zu suchen

 var crops=[]; 

    for(int i=0; i<results.length;i++) 
    { 
     var terrains= results.features[i].attributes.Terrain_Id; 
     var rawDataOfTerrain=getjsondata("http://or.org"); 

     var trsetdata= jQuery.parseJSON(tersetjson).d.results; 

     crops.push(trsetdata); 
    } 

     var cropsSoFar= []; 

     for(int i=0; i<crops.length;i++) 
     { 
      var crop= crops[i]; 
      if(crop in cropsSoFar) 
      { 
       crops.pop(crop); 
      } 
      cropsSoFar.push(crops[i]); 

     } 

     if(crops.length!=1) 
      alert("Please select terrains with the same crop"); 

Ist dies der richtige Weg für eineZeichenfolge in einem Array suchen? Wenn ja, gibt es einen leichteren Weg? Wenn nicht, wo liege ich falsch?

+0

Wenn trsetdata in einer Zeichenfolge ist, wird nur ein Element überprüft. und Sie checken ein leeres Array von var cropsSoFar = []; ein. – Ray

+0

Nein, der 'in'-Operator ist sicherlich der falsche Weg. – Bergi

+0

Sie haben die Verwendung des Arrays '.pop()' missverstanden, es benötigt kein Argument und entfernt immer das letzte Element des Arrays. Es sollte reichen, die 'corpsSoFar.push()' in die if-Anweisung zu verschieben und sie in ein * not * zu ändern, aber es ist besser, einfach zu überprüfen, bevor du zum ersten Array drückst und den zweiten Teil überspringst. –

Antwort

3

Sie können nach Duplikaten bei der ersten Erstellung von crops mit indexOf suchen.

var crops = []; 

for(int i = 0; i < results.length; i++) { 
    var terrains = results.features[i].attributes.Terrain_Id; 
    var rawDataOfTerrain =getjsondata("http://or.org"); 
    var trsetdata = $.parseJSON(tersetjson).d.results; 

    if(crops.indexOf(trsetdata) === -1) 
     crops.push(trsetdata); 
} 

if(crops.length != 1) 
     alert("Please select terrains with the same crop"); 
+0

Nur 1 Fang. Dies speichert den ersten Wert. Wenn der letzte Wert erwartet wird, würde ich vorschlagen, ein Objekt anstelle von Arrays zu verwenden. – Rajesh

0

Wenn Ihr Array ein einfaches String-Array ist, als Array.prototype.indexOf zu verwenden, wie in den doc erscheinen.

var list = ["my", "simple", "strings", "array"]; 
var founds = []; 
var i = list.indexOf("simple"); 

if (i != -1) 
    founds.push(list[i]); 

Wenn das, was Sie stattdessen tun wollen, die Liste ist filtern, sollten Sie die Array.prototype.filter verwenden, dass eine Rückruffunktion als Parameter erhalten und wieder zu Ihnen das neue Array:

function getMyStrings(value) { 
    return value.match(/m/); 
} 

var filtered = ["my", "simple", "strings", "array"].filter(getMyStrings); 

Wenn Sie haben nur ein Ergebnis, können Sie find Methode verwenden. Es dauert einen Rückruf, aber es gibt nur einen Wert.

Der Vorteil einer Callback-Funktion besteht darin, dass Sie komplexe Objekte statt einfacher Strings problemlos verarbeiten können.

Verwandte Themen