我将使用一个人输入值的输入字段 我创建了他们将输入的变量:'Ben' 我希望函数循环通过nameArray并返回true或false。
脚本不起作用,我知道它很简单。
function validateNames() {
var name = "Ben";
var nameArray = ["Bill", "Barry", "Zack", "Will"];
var arrayLength = nameArray.length;
for (var i = 0; i < arrayLength; i++) {
//Do something
if (name != nameArray[i]) {
alert((nameArray[i]) + "Name is not valid.");
console.log("Name is not found in array.");
} else {
return true;
console.log(nameArray[i]);
}
}
}
答案 0 :(得分:2)
循环逻辑知道值不在数组中的唯一方法是首先遍历整个数组。您的循环将在每次迭代时发出警报,直到找到匹配为止。将console.log
放在return
之后也没有意义,因为前者永远不会执行:
function validateNames() {
var name = "Ben";
var nameArray = ["Bill", "Barry", "Zack", "Will"];
var arrayLength = nameArray.length;
for (var i = 0; i < arrayLength; i++) {
if (name === nameArray[i]) {
console.log(nameArray[i]);
return true;
}
}
console.log("Name is not found in array.");
return false;
}
validateNames();
&#13;
Javascript数组还提供了一种方便的方法来检查它们是否包含某个值。它被称为.indexOf()
,如果没有匹配则会返回-1
:
function validateNames() {
var name = "Ben";
var nameArray = ["Bill","Barry","Zack","Will"];
return nameArray.indexOf(name) !== -1;
}
答案 1 :(得分:0)
您可以使用.indexOf()
:
var nameArray = ["Bill","Barry","Zack","Will"];
nameArray.indexOf("Bill"); // Returns 0, Bill is found
nameArray.indexOf("Hillary"); // Returns -1, Hillary not found
所以你的功能可能如下:
function validateName(name) {
return nameArray.indexOf(name) !== -1;
}
请注意,它不适用于IE8或以下版本。
答案 2 :(得分:0)
这将是false
,因为Ben不存在于数组
if (nameArray.indexOf(name) > -1)
您可以向contains()
课程添加Array
方法,这样您就不必每次都输入此内容。
// Static method
if (Array.contains === undefined) {
Array.contains = function(arr, val) {
return arr.indexOf(val) > -1;
}
}
// Instance method
if (Array.prototype.contains === undefined) {
Array.prototype.contains = function(val) {
return this.indexOf(val) > -1;
}
}
var nameArray = ["Bill", "Barry", "Zack", "Will"];
var name = "Ben";
Array.contains(nameArray, name); // false
nameArray.contains(name); // false
您也可以使用一些Array.prototype.some
。
if (Array.prototype.contains === undefined) {
Array.prototype.contains = function(val) {
return this.some(function(item) {
return item === name;
});
}
}
更好的方法是填充Array.prototype.includes()
。这是ECMAScript 7中即将推出的方法。
if (![].includes) {
Array.prototype.includes = function(searchElement /*, fromIndex*/ ) {'use strict';
var O = Object(this);
var len = parseInt(O.length) || 0;
if (len === 0) {
return false;
}
var n = parseInt(arguments[1]) || 0;
var k;
if (n >= 0) {
k = n;
} else {
k = len + n;
if (k < 0) {k = 0;}
}
var currentElement;
while (k < len) {
currentElement = O[k];
if (searchElement === currentElement ||
(searchElement !== searchElement && currentElement !== currentElement)) {
return true;
}
k++;
}
return false;
};
}
[1, 2, 3].includes(2); // true
[1, 2, 3].includes(4); // false
[1, 2, 3].includes(3, 3); // false
[1, 2, 3].includes(3, -1); // true
[1, 2, NaN].includes(NaN); // true
答案 3 :(得分:0)
轻松修复:)
var nameArray = ["Bill", "Barry", "Zack", "Will"];
console.log(validateName("Ben", nameArrray)); // False
console.log(validateName("Will", nameArrray)); // True
function validateName(name, arr){
var found = 0;
for(var i = 0; i < arr.length; i++){
found += (name === arr[i])? 1 : 0;
}
var result = (found>0)? true: false;
return result;
}