想要检查一个变量是否存在于数组中

4

我有一个国家数组。

var countriesArray = ["United States","Afghanistan","Albania","Algeria","Argentina","Australia","Austria", "Bahrain"];

我正在将一个国家的值存储到一个变量中。

     <div id="location" class="editable-item">
    <dl><dt>Location</dt><dd><span class="locality"><a href="/vsearch/p?f_G=in%3A7127&amp;trk=prof-0-ovw-location" name="location" title="Find other members in Bengaluru Area, India">Bengaluru Area, India</a></span></dd><dt>Industry</dt><dd class="industry"><a href="/vsearch/p?f_I=11&amp;trk=prof-0-ovw-industry" name="industry" title="Find other members in this industry">Management Consulting</a></dd></dl></div>
    var place = document.querySelector('#location .locality a').innerHTML;
    var splitPlace = place.split(',');
    var length = splitPlace.length;
    var lastValue = splitPlace[length - 1] ;

这里lastValue变量的值为阿尔及利亚。

我想检查lastValue变量中的值是否存在于countriesArray数组中。为此,我使用了以下代码:

console.log($.inArray(lastValue, countriesArray));

无论值是否存在于数组中,它总是返回-1。请指出其中的错误或提供其他方法。另外,我希望比较值时不考虑大小写。


显示函数splitPlace - mplungjan
我已经展示了上面的 splitplace。 - Bhawna Malhotra
1
@BhawnaMalhotra。这并没有帮助。我们需要知道splitPlace的内容。 - Zee
我编辑了问题并提供了HTML,从中获取值。 - Bhawna Malhotra
在 countries 数组中,我有所有国家的名称,但这里只列出了一些国家。 - Bhawna Malhotra
显示剩余2条评论
4个回答

2

在你的代码中,lastValue 的值为 " India",它以一个空格字符开头。你应该使用 jQuery 的 $.trim 或者 String.prototype.trim 函数来去除这个字符串的空格。另外,数组中没有 India 元素,所以 $.inArray 仍然会返回 -1

$.inArray($.trim(lastValue), countriesArray);

如果搜索不区分大小写,您可以使用String.prototype.toLowerCaseString.prototype.toUpperCase方法:

$.inArray(lastValue.trim().toLowerCase(), countriesArray.map(function(el) {
    return el.toLowerCase();
}));

这个可以工作...但是为了不区分大小写,我必须手动将其转换为小写进行比较。 - Bhawna Malhotra
在 countries 数组中,我有所有国家的名称,但这里只列出了一些国家。 - Bhawna Malhotra
@BhawnaMalhotra 我已经更新了答案,并提供了一个不区分大小写的示例。如果你想支持IE8,可以使用jQuery的$.trim$.map函数代替上面的函数!$.trim(lastValue).toLowerCase() ... - Ram

2

以下是一个完整的示例:

var countriesArray = ["united states", "afghanistan", "albania", "algeria", "argentina", "australia", "austria", "bahrain"];
$(function() {
  var place = $('#location .locality a').html();
  var splitPlace = place.split(',');
  var length = splitPlace.length;
  var lastValue = $.trim(splitPlace[length - 1]);
  var found = $.inArray(lastValue.toLowerCase(), countriesArray)!=-1;
  alert(lastValue+" was "+(found?"found":"not found"))
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="location"><span class="locality"><a href=#">Algeria,Argentina,Australia,Austria,Bahrain</a></span></div>


$.inArray的本地替代方案 - indexOf

var last = countriesArray[countriesArray.length-1];
alert(countriesArray.indexOf(last.toLowerCase().trim())!=-1);

该代码使用JavaScript中的indexOf函数来替代jQuery中的$.inArray函数。它可以用于查找数组中某个元素的位置,并返回其索引值。在这里,我们使用toLowerCase和trim函数来规范化字符串,以确保比较的一致性。


它返回了countriesArray中的索引,但我想检查一个变量中获取的值是否存在于countriesArray中。 - Bhawna Malhotra
@BhawnaMalhotra,我很失望你接受了另一个答案。我是第一个回答并根据您提供的每个更改规格更新了我的答案。我猜测您的国家名称前面有空格,因为您没有提供实际数据的示例,所以我添加了去除空格的代码。 - mplungjan
你提供的第一个答案在我编辑问题之前就没有按预期工作。但是不用担心,你的解决方案会帮助我的程序员们。 :) - Bhawna Malhotra
由于我没有考虑到添加修剪(trim)操作,因为没有您实际数据的示例,所以它在您的计算机上对您的数据没有按预期工作。然后我在其他人添加修剪操作之前添加了修剪操作,但在此之前,我的版本是可以工作的,只是在您未发布的数据上无法完全工作。现在我的答案对您来说是一个即插即用的解决方案。 - mplungjan

0

以下代码应该可以实现:

if(countriesArray.indexOf(lastValue) >= 0 )
{
   alert("present");
}
else 
{
   alert("not present");
}

如果你想让它不区分大小写,最好迭代一下。
for(var i=0; i<lastValue.length; i++)
{
   if(lastValue.toLowerCase().trim() == countriesArray[i].toLowerCase().trim())
   {
       alert("present");
       break;
   }
}

不起作用。同时,它希望进行不区分大小写的匹配。 - Bhawna Malhotra

0

尝试使用.trim()来修剪值,因为它可能包含前导和尾随空格:

if(countriesArray.toString().indexOf(lastValue.trim())>=0) {
  alert(lastValue)
}

演示代码


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接