在数组中搜索字符串的最佳方法

Posted

技术标签:

【中文标题】在数组中搜索字符串的最佳方法【英文标题】: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 应该就足够了,但最好在推送到第一个数组并跳过第二部分之前简单地检查一下。 【参考方案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 方法。它需要一个回调,但它只得到一个值。

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

【讨论】:

以上是关于在数组中搜索字符串的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

在 node.js 中的数组内查找字符串的最佳方法是啥?

在 python 中创建字符串数组的最佳方法是啥?

如何在 MATLAB 的元胞数组中搜索字符串?

在 JavaScript 中比较字符串的最佳方法? [复制]

将json字符串转换为对象数组的最佳方法是啥? [复制]

在javascript中将字符串转换为对象数组的最佳方法?