在数组

时间:2016-07-19 09:12:13

标签: javascript jquery arrays for-loop duplicates

我将从网址获取的数据添加到数组 crop 。在此之后,我将在新阵列 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");

这是在数组中搜索字符串的正确方法吗?如果是这样,有一种更简单的方法吗?如果没有,我哪里错了?

2 个答案:

答案 0 :(得分: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");

答案 1 :(得分:0)

如果您的数组是一个简单的字符串数组,请使用doc中显示的Array.prototype.indexOf

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

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

如果您要执行的操作是过滤列表,则应使用Array.prototype.filter,将回调函数作为参数并返回给您新的数组:

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

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

如果您只有一个结果,则可以使用find方法。它需要一个回调,但它只获得一个值。

传递回调函数的好处是,您可以轻松处理复杂对象而不是纯字符串。