【问题标题】:best way to search for a string in an array在数组中搜索字符串的最佳方法
【发布时间】:2016-11-22 02:11:15
【问题描述】:

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

这是在 array 中搜索 string 的正确方法吗?如果是这样,有没有更简单的方法?如果没有,我哪里错了?

【问题讨论】:

  • 如果 trsetdata 在字符串中,那么它只会检查一个元素。并且您正在检查 var cropSoFar= [];. 的空数组
  • 不,in 运算符肯定是错误的方式。
  • 你误解了数组.pop()的用法,它不带参数,总是删除数组的最后一项。将 corpsSoFar.push() 移动到 if 语句中并将其更改为 not 应该就足够了,但最好在推送到第一个数组并跳过第二部分之前简单地检查一下。

标签: javascript jquery arrays for-loop duplicates


【解决方案1】:

您可以使用indexOf 在第一次创建crops 时检查重复项。

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 次捕获。这将存储第一个值。如果需要最新值,我建议使用对象而不是数组。
【解决方案2】:

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

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 方法。它需要一个回调,但它只得到一个值。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-18
    • 2014-03-23
    • 2023-04-10
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多