【问题标题】:Search string inside array javascript在数组javascript中搜索字符串
【发布时间】:2016-07-24 13:13:52
【问题描述】:

我正在寻找一个简单的函数来检查特定字符串是否在我的数组中。

function checkRegion(departement){
    var region = '';

    if(alsace.indexOf(departement) != -1)
    {
        region = "alsace";
    }
    if(aquitaine.indexOf(departement) != -1){
        region = "aquitaine";
    }
    if(auvergne.indexOf(departement) != -1){
        region = "auvergne";
    }
    if(basseNormandie.indexOf(departement) != -1){
       region = "basse-normandie";
    }
    if(iledefrance.indexOf(departement) != -1){
        region = "ile-de-france";
    }else{
        region = 'undennnnnfined';
    }

    return region;
};

有什么办法吗?

谢谢

【问题讨论】:

  • 那么你的问题是什么?你的功能有效吗?什么是alsaceaquitaineauvergne、...。
  • 我的函数不起作用,它总是返回“undefinnnned”...(阿尔萨斯、阿基坦等......是字符串数组)
  • 函数应该搜索字符串“departement”是否在这些数组之一(alsace、aquitaine、auvergne 等)内。当我们有匹配时,它应该在变量“region”中添加特定的单词并返回它
  • 您的问题完全不清楚。你在哪里定义 alsaceaquinaineauvergnebasseNormandieiledefrance?它们必须是数组,但如果您希望我们提供帮助,我们将需要它们的代码。
  • 提供的代码不提供任何研究。把你的变量值也放在这里。

标签: javascript jquery arrays string


【解决方案1】:

您的问题在于使用连续的if 语句而不将它们链接在一起进行完整检查。

按照你的方式做,代码实际上完全忽略了所有if 语句,但最后一个

所以,如果 iledefrance.indexOf(departement) != -1 给出 false,它会一直执行 else 里面的代码,意思是将设置 region = 'undennnnnfined'


注意:

在代码中,我将 != -1 替换为 ~,因为它使代码更加简洁。本质上,它将-1转换为0,即false

如果您不熟悉,请务必查看MDN's documentation 了解更多信息。


1st 选项

尝试以 if/else if/else 格式将您的 if 语句链接在一起,如下所示:

function checkRegion(departement){
    var region = '';

    if(~alsace.indexOf(departement)) {
        region = "alsace";
    }
    else if(~aquitaine.indexOf(departement)) {
        region = "aquitaine";
    }
    else if(~auvergne.indexOf(departement)) {
        region = "auvergne";
    }
    else if(~basseNormandie.indexOf(departement)) {
        region = "basse-normandie";
    }
    else if(~iledefrance.indexOf(departement)) {
        region = "ile-de-france";
    }
    else{
        region = 'undennnnnfined';
    }
    return region;
};

2nd 选项

创建两个数组:

  • 其中应包含您的区域数组(alsaceaquitaine 等)&
  • 另外一个包含数组名称作为字符串,以便您可以根据评估为 true 的数组返回适当的字符串。

代码:

function checkRegion(departement) {
    var
       regions = [alsace, aquitaine, auvergne, basseNormandie, iledefrance],
       regionsNames = ["alsace", "aquitaine", "auvergne", "basseNormandie", "iledefrance"];

    for (var i = 0; i < regions.length; i++) {
        if (~regions[i].indexOf(departement)) {
            return regionsNames[i];
        }
    }
    return "undennnnnfined"; // If the 'for' loop doesn't return anything, it's false.
};

演示:

  • 使用 1st 解决方案进行演示 → here.
  • 使用 2nd 解决方案进行演示 → here.

片段:

  • 使用 1st 解决方案的代码段:

function checkRegion(departement){
    var region = '';

    if(~alsace.indexOf(departement)) {
        region = "alsace";
    }
    else if(~aquitaine.indexOf(departement)) {
        region = "aquitaine";
    }
    else if(~auvergne.indexOf(departement)) {
        region = "auvergne";
    }
    else if(~basseNormandie.indexOf(departement)) {
       region = "basse-normandie";
    }
    else if(~iledefrance.indexOf(departement)) {
        region = "ile-de-france";
		}
    else{
        region = 'undennnnnfined';
    }
    return region;
};

var
   alsace = ["Strasbourg", "Colmar"],
   aquitaine = ["Gironde", "Landes", "Dordogne", "Pyrenees-Atlantiques", "Lot-et-Garonne"],
   auvergne = [],
   basseNormandie = [],
   iledefrance = [];
   
alert(checkRegion("Strasbourg"));
  • 第二个nd解决方案的片段:

function checkRegion(departement) {
    var
       regions = [alsace, aquitaine, auvergne, basseNormandie, iledefrance],
       regionsNames = ["alsace", "aquitaine", "auvergne", "basseNormandie", "iledefrance"];

    for (var i = 0; i < regions.length; i++) {
        if (~regions[i].indexOf(departement)) {
            return regionsNames[i];
        }
    }
    return "undennnnnfined"; // If the 'for' loop doesn't return anything, it's false.
};

var
   alsace = ["Strasbourg", "Colmar"],
   aquitaine = ["Gironde", "Landes", "Dordogne", "Pyrenees-Atlantiques", "Lot-et-Garonne"],
   auvergne = [],
   basseNormandie = [],
   iledefrance = [];
   
alert(checkRegion("Strasbourg"));

【讨论】:

    猜你喜欢
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多