我正在为一个网站制作一段代码,该网站将在数组中包含一个名称列表,并选择一个随机名称,我想添加一个功能,让用户在数组中添加或删除一个名称.我拥有所有这些功能,但在删除名称时,用户必须键入名称以匹配数组中的Case.我试图这样做就是Case-Insensitive,我做错了什么?
<html>
<!--Other code uneeded for this question-->
<p id="canidates"></p>
<body>
<input type="text" id="delname" /><button onclick="delName()">Remove Name from List</button>
<script>
//Array of names
var names = [];
//Other code uneeded for this question
//List of Canidates
document.getElementById('canidates').innerHTML =
"<strong>List of Canidates:</strong> " + names.join(" | ");
//Other code uneeded for this question
//Remove name from Array
function delName() {
var dnameVal = document.getElementById('delname').value;
var pos = names.indexOf(dnameVal);
var namepos = names[pos]
var posstr = namepos.toUpperCase();
var dup = dnameVal.toUpperCase();
if(dup != posstr) {
alert("Not a valid name");
}
else {
names.splice(pos, 1);
document.getElementById('canidates').innerHTML =
"<strong>List of Canidates:</strong> " + names.join(" | ");
}
}
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
vsy*_*ync 50
var array = ['I', 'hAve', 'theSe', 'ITEMs'],
query = 'these',
result = array.findIndex(item => query.toLowerCase() === item.toLowerCase());
console.log(result); // 2Run Code Online (Sandbox Code Playgroud)
qui*_*int 27
在ECMA-262第5版中,您可以使用Array.prototype.some它.
var array = [ 'I', 'hAve', 'theSe', 'ITEMs' ];
var query = 'these'.toLowerCase();
var index = -1;
array.some(function(element, i) {
if (query === element.toLowerCase()) {
index = i;
return true;
}
});
// Result: index = 2
Run Code Online (Sandbox Code Playgroud)
Ral*_*lph 23
简单的方法是拥有一个包含所有大写名称的临时数组.然后您可以比较用户输入.所以你的代码可能变成这样的东西:
function delName() {
var dnameVal = document.getElementById('delname').value;
var upperCaseNames = names.map(function(value) {
return value.toUpperCase();
});
var pos = upperCaseNames.indexOf(dnameVal.toUpperCase());
if(pos === -1) {
alert("Not a valid name");
}
else {
names.splice(pos, 1);
document.getElementById('canidates').innerHTML =
"<strong>List of Canidates:</strong> " + names.join(" | ");
}
}
Run Code Online (Sandbox Code Playgroud)
希望这有助于解决您的问题.
最优雅的解决方案是首先将数组转换为字符串,然后进行不区分大小写的比较.例如:
var needle = "PearS"
var haystack = ["Apple", "banNnas", "pEArs"];
var stricmp = haystack.toString().toLowerCase(); // returns
// "apple,bananas,pears"
if (stricmp.indexOf(needle.toLowerCase()) > -1) {
// the search term was found in the array
} else {
// the search term was not found in the array
}
Run Code Online (Sandbox Code Playgroud)
可能最好创建自己的自定义indexOf方法,就像这样.
'use strict';
var customIndexOf = function(arrayLike, searchElement) {
var object = Object(arrayLike);
var length = object.length >>> 0;
var fromIndex = arguments.length > 2 ? arguments[2] >> 0 : 0;
if (length < 1 || typeof searchElement !== 'string' || fromIndex >= length) {
return -1;
}
if (fromIndex < 0) {
fromIndex = Math.max(length - Math.abs(fromIndex), 0);
}
var search = searchElement.toLowerCase();
for (var index = fromIndex; index < length; index += 1) {
if (index in object) {
var item = object[index];
if (typeof item === 'string' && search === item.toLowerCase()) {
return index;
}
}
}
return -1;
};
var names = [
'John',
'Anne',
'Brian'
];
console.log(customIndexOf(names, 'aNnE'));Run Code Online (Sandbox Code Playgroud)
甚至
'use strict';
var customIndexOf = function(array, searchElement, fromIndex) {
return array.map(function(value) {
return value.toLowerCase();
}).indexOf(searchElement.toLowerCase(), fromIndex);
};
var names = [
'John',
'Anne',
'Brian'
];
console.log(customIndexOf(names, 'aNnE'));Run Code Online (Sandbox Code Playgroud)
您可能还想添加更多检查以确保数组中的每个元素实际上都是a,String并且searchElement实际上也是一个String.如果在ES5之前,则加载适当的垫片
| 归档时间: |
|
| 查看次数: |
64477 次 |
| 最近记录: |