2016-07-19 6 views
1

URLから取得したデータを配列の作物に追加します。この後、私は新しい配列の助けを借りて重複作物を確認していますcropsSoFar配列内の文字列を検索する最良の方法

 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"); 

これは配列文字列を検索するための正しい方法ですか?もしそうなら、より簡単な方法がありますか?そうでない場合は、どこが間違っていますか?

+0

trsetdataが文字列内にある場合、それは1つの要素のみをチェックします。 var cropsFoar = [];の空の配列をチェックインしています。 – Ray

+0

いいえ、 'in'演算子は確かに間違った方法です。 – Bergi

+0

あなたは配列 '.pop()'の使い方を誤解しています。それは引数をとらず、常に配列の最後の項目を削除します。 'corpsSoFar.push()'をif文に移動して* not *に変更すれば十分ですが、最初の配列にプッシュして2番目の部分をスキップする前にチェックする方が良いでしょう。 –

答えて

3

cropsの最初の作成時に重複を確認するには、indexOfを使用します。

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

ちょうど1つのキャッチ。これは第1の値を格納する。最新の値が期待される場合は、配列の代わりにオブジェクトを使うことをお勧めします。 – Rajesh

0

docに表示されるようArray.prototype.indexOfを使用するよりも、あなたの配列は、単純な文字列配列は、ある場合。

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

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

の場合:

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

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

あなたが何をしたいのか、代わりに、リストをフィルタリングしている場合、あなたはArray.prototype.filterを使用する必要があり、それはあなたにパラメータと戻り、新しい配列をコールバック関数を取得します1つの結果しかない場合は、findメソッドを使用できます。コールバックを受け取りますが、値は1つだけです。

コールバック関数を渡す利点は、単純な文字列ではなく複雑なオブジェクトを簡単に処理できることです。

関連する問題