2015-11-23 85 views
0

嗨,我需要将文本输入和数组转换为小写,所以输入时它可以匹配数组。我不断收到错误,表示airline.Array.contains不是一个函数。任何人都可以帮忙吗?隐藏输入为小写

var euAirlines = [ 
     "British Airways", 
     "Austrian Airlines", 
     "Blue Islands", 
     "KLM", 
     "TAP Portugal", 
     "Air Malta", 
     "Air France", 
     "germanwings", 
     "Wideroe", 
     "Lufthansa", 
     "Aegean Airlines", 
     "Citywing", 
     "Flybe", 
     "Aurigny", 
     "airBaltic", 
     "Swiss", 
     "eurowings", 
     "Croatia Airlines", 
     "SAS", 
     "LOT", 
     "Air Serbia", 
     "Iberia", 
     "Wizz Air", 
     "Blue Air", 
     "easyJet", 
     "Air Europa", 
     "Czech Airlines", 
     "Aer Lingus", 
     "Eastern Airways", 
     "Smart Wings", 
     "Aeroflot", 
     "Thomson Airways", 
     "bmi regional", 
     "Ryanair", 
     "Monarch", 
     "TAROM", 
     "Brussels Airlines", 
     "Jet2", 
     "Meridiana", 
     "Vueling Airlines", 
     "CityJet", 
     "Scilly Skybus", 
     "Alitalia", 
     "Thomas Cook Airlines", 
     "Garuda Indonesia", 
     "Norwegian", 
     "Ukraine International", 
     "Bulgaria Air", 
     "Finnair", 
     "Luxair" 
    ]; 

    Array.prototype.contains = function (needle) { 
     for (i in this) { 
      if (this[i] == needle) return true; 
     } 
     return false; 
    } 

    var airlineInput = document.getElementById("airlineInput"), 
     airlineArray = euAirlines.toString().toLowerCase(); 
    document.getElementById("claim-submit").onclick = function(e) { 
     var lower = airlineInput.value.toLowerCase(); 
     console.log(lower); 
     if (airlineArray.contains(lower.value)) { 

     console.log("Match"); 
     }else { 

     console.log("No Match") 
     } 

    } 
+1

这是因为它不是一个数组...'airlineArray = euAirlines.toString()toLowerCase();'不做你的想法 –

+0

airlineArray我想所有的数组值都是小写,然后检查文本输入。 – Doddsy

+0

在'toLowerCase()'后添加'.split(',')''''''' –

回答

0

您不需要编写包含数组作为字符串已经有一个包含功能。你可以像这样使用。

var lowerCaseArrayString = euAirlines.toString().toLowerCase(); 
if(lowerCaseArrayString.includes(lower)){ 
    console.log("matched"); 
}else{ 
    console.log("not matched"); 
} 

或者如果你还想用数组,那么你可以使用这个。

var lowerCaseArray = euAirlines.toString().toLowerCase().split(","); 
if(lowerCaseArray.indexOf(lower) > -1){ 
    console.log("matched"); 
}else{ 
    console.log("not matched"); 
} 
+0

它不是'contains',而是['includes'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes) – R3tep

+0

@ R3tep好的,我检查了。 'Includes'好得多,因为它支持所有的浏览器,但Firefox仍然有包含'includes'的字符串的'contains'方法。 –

1

您可以轻松创建一个降低航空公司这样的新列表。

var lowercaseEUAirlines = euAirlines.map(function(airline) { 
    return airline.toLowerCase(); 
}); 

然后,您可以轻松地在它使用foreach循环:

lowercaseEUAirlines.forEach(function(element, index, array) { 
    console.log(element); 
}); 
0

可能这里是你搜索的内容:

var euAirlines = [ 
 
     "British Airways", 
 
     "Austrian Airlines", 
 
     "Blue Islands", 
 
     "KLM", 
 
     "TAP Portugal", 
 
     "Air Malta", 
 
     "Air France", 
 
     "germanwings", 
 
     "Wideroe", 
 
     "Lufthansa", 
 
     "Aegean Airlines", 
 
     "Citywing", 
 
     "Flybe", 
 
     "Aurigny", 
 
     "airBaltic", 
 
     "Swiss", 
 
     "eurowings", 
 
     "Croatia Airlines", 
 
     "SAS", 
 
     "LOT", 
 
     "Air Serbia", 
 
     "Iberia", 
 
     "Wizz Air", 
 
     "Blue Air", 
 
     "easyJet", 
 
     "Air Europa", 
 
     "Czech Airlines", 
 
     "Aer Lingus", 
 
     "Eastern Airways", 
 
     "Smart Wings", 
 
     "Aeroflot", 
 
     "Thomson Airways", 
 
     "bmi regional", 
 
     "Ryanair", 
 
     "Monarch", 
 
     "TAROM", 
 
     "Brussels Airlines", 
 
     "Jet2", 
 
     "Meridiana", 
 
     "Vueling Airlines", 
 
     "CityJet", 
 
     "Scilly Skybus", 
 
     "Alitalia", 
 
     "Thomas Cook Airlines", 
 
     "Garuda Indonesia", 
 
     "Norwegian", 
 
     "Ukraine International", 
 
     "Bulgaria Air", 
 
     "Finnair", 
 
     "Luxair" 
 
    ]; 
 

 
var checking = function (e, val) { 
 
    if (e.keyCode == 13) { 
 
    $('body').append($('<p>').text($.inArray(val, euAirlines) > -1 ? 'Match' : 'Not match')) 
 
    } 
 
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" id="airlineInput" onkeyup="checking(event, $(this).val().toLowerCase())" />

为了测试我的榜样:输入GermanwingsEurowings并按回车进行检查。

0

您已将数组转换为字符串(airlineArray = euAirlines.toString().toLowerCase()),并且字符串没有属性contains

您似乎想要检查航空公司阵列中输入是否存在(部分)匹配。如果是这样的话,你可以使用Array.prototype.filter找到匹配的元素,并String.prototype.indexOf找到,如果它匹配,就像这样:

var euAirlines = [ 
    "British Airways", 
    "Austrian Airlines", 
    "Blue Islands", 
    "KLM", 
    "TAP Portugal", 
    "Air Malta", 
    "Air France", 
    "germanwings", 
    "Wideroe", 
    "Lufthansa", 
    "Aegean Airlines", 
    "Citywing", 
    "Flybe", 
    "Aurigny", 
    "airBaltic", 
    "Swiss", 
    "eurowings", 
    "Croatia Airlines", 
    "SAS", 
    "LOT", 
    "Air Serbia", 
    "Iberia", 
    "Wizz Air", 
    "Blue Air", 
    "easyJet", 
    "Air Europa", 
    "Czech Airlines", 
    "Aer Lingus", 
    "Eastern Airways", 
    "Smart Wings", 
    "Aeroflot", 
    "Thomson Airways", 
    "bmi regional", 
    "Ryanair", 
    "Monarch", 
    "TAROM", 
    "Brussels Airlines", 
    "Jet2", 
    "Meridiana", 
    "Vueling Airlines", 
    "CityJet", 
    "Scilly Skybus", 
    "Alitalia", 
    "Thomas Cook Airlines", 
    "Garuda Indonesia", 
    "Norwegian", 
    "Ukraine International", 
    "Bulgaria Air", 
    "Finnair", 
    "Luxair" 
]; 

function containsLowerCaseMatch(needle, value) { 
    return value.toLowerCase().indexOf(needle.toLowerCase()) > -1; 
} 

var airlineInput = document.getElementById("airlineInput"); 
var matches = euAirlines.filter(containsLowerCaseMatch.bind(null, airlineInput.value)); 

if (matches.length > 0) { 
    console.log('Match'); 
} else { 
    console.log('No match'); 
} 

的代码还使用Function.prototype.bind通过输入的文本。

与自动完成完整的示例

var euAirlines = [ 
 
    "British Airways", 
 
    "Austrian Airlines", 
 
    "Blue Islands", 
 
    "KLM", 
 
    "TAP Portugal", 
 
    "Air Malta", 
 
    "Air France", 
 
    "germanwings", 
 
    "Wideroe", 
 
    "Lufthansa", 
 
    "Aegean Airlines", 
 
    "Citywing", 
 
    "Flybe", 
 
    "Aurigny", 
 
    "airBaltic", 
 
    "Swiss", 
 
    "eurowings", 
 
    "Croatia Airlines", 
 
    "SAS", 
 
    "LOT", 
 
    "Air Serbia", 
 
    "Iberia", 
 
    "Wizz Air", 
 
    "Blue Air", 
 
    "easyJet", 
 
    "Air Europa", 
 
    "Czech Airlines", 
 
    "Aer Lingus", 
 
    "Eastern Airways", 
 
    "Smart Wings", 
 
    "Aeroflot", 
 
    "Thomson Airways", 
 
    "bmi regional", 
 
    "Ryanair", 
 
    "Monarch", 
 
    "TAROM", 
 
    "Brussels Airlines", 
 
    "Jet2", 
 
    "Meridiana", 
 
    "Vueling Airlines", 
 
    "CityJet", 
 
    "Scilly Skybus", 
 
    "Alitalia", 
 
    "Thomas Cook Airlines", 
 
    "Garuda Indonesia", 
 
    "Norwegian", 
 
    "Ukraine International", 
 
    "Bulgaria Air", 
 
    "Finnair", 
 
    "Luxair" 
 
]; 
 

 
function containsLowerCaseMatch(needle, value) { 
 
    return value.toLowerCase().indexOf(needle.toLowerCase()) > -1; 
 
} 
 

 
var airlineInput = document.getElementById("airlineInput"), suggestions = document.getElementById("suggestions"); 
 

 
airlineInput.onkeyup = function() { 
 
    suggestions.innerHTML = ''; 
 

 
    var matches = euAirlines.filter(containsLowerCaseMatch.bind(null, airlineInput.value)).forEach(function(value) { 
 
    var li = document.createElement('li'); 
 
    li.appendChild(document.createTextNode(value)); 
 
    suggestions.appendChild(li); 
 
    }); 
 
}; 
 

 
airlineInput.onkeyup();
<input id=airlineInput name=airlineInput> 
 
<h1>Suggestions</h1> 
 
<ol id=suggestions></ol>

你显然需要以使其适应你的代码。

+0

如果使用现代浏览器,它确实有'includes()':https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes –

+0

@NeilMunro我知道,但我提供的代码在IE9 +中受支持。此外,它还允许您提供自动完成功能(我想像OP计划执行的功能),而不会发生任何重大更改或重复。 – Toothbrush

0

只需使用映射:

newArray = map(function(s){s.toLowerCase()}, oldArray) 
+0

这是[** @ NeilMunro **的答案](https://stackoverflow.com/a/33871105/3210837)的副本。 – Toothbrush

+0

我假设你的意思是写'newArray = oldArray.map(function(s){s.toLowerCase()})'。 – Toothbrush

0
var euAirlines = [ 
     "British Airways", 
     "Austrian Airlines", 
     "Blue Islands", 
     "KLM", 
     "TAP Portugal", 
     "Air Malta", 
     "Air France", 
     "germanwings", 
     "Wideroe", 
     "Lufthansa", 
     "Aegean Airlines", 
     "Citywing", 
     "Flybe", 
     "Aurigny", 
     "airBaltic", 
     "Swiss", 
     "eurowings", 
     "Croatia Airlines", 
     "SAS", 
     "LOT", 
     "Air Serbia", 
     "Iberia", 
     "Wizz Air", 
     "Blue Air", 
     "easyJet", 
     "Air Europa", 
     "Czech Airlines", 
     "Aer Lingus", 
     "Eastern Airways", 
     "Smart Wings", 
     "Aeroflot", 
     "Thomson Airways", 
     "bmi regional", 
     "Ryanair", 
     "Monarch", 
     "TAROM", 
     "Brussels Airlines", 
     "Jet2", 
     "Meridiana", 
     "Vueling Airlines", 
     "CityJet", 
     "Scilly Skybus", 
     "Alitalia", 
     "Thomas Cook Airlines", 
     "Garuda Indonesia", 
     "Norwegian", 
     "Ukraine International", 
     "Bulgaria Air", 
     "Finnair", 
     "Luxair" 
    ]; 
    var new_euAirlines_lowercase=euAirlines.toString().toLowerCase().split(','); 
    Array.prototype.contains=function(input_value){ 
    new_euAirlines_lowercase.forEach(function(value,index){ 
     if(value == input_value) 
     console.log('matched') 
     else 
     console.log('did not match') 
    }); 
    } 

    $('#claim-submit').on('click',function(e){ 
     e.preventDefault(); 
     var input= $("#airlineInput").val().toLowerCase(); 
     Array.prototype.contains(input); 
    }); 

的jsfiddle链接:https://jsfiddle.net/Dee0565/gnnf86jh/