在数组中搜索字符串的最佳方法
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
方法。它需要一个回调,但它只得到一个值。
传递回调函数的好处是您可以轻松处理复杂对象而不是普通字符串。
【讨论】:
以上是关于在数组中搜索字符串的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章