![](/img/trans.png)
[英]How can I check if a value exists in an array with multiple objects - javascript?
[英]How can I use a Function to determine if a Value exists in a Javascript Array?
我将在一个输入字段中输入一个值。
我创建他们将输入的变量:“ 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]);
}
}
}
循环逻辑知道该值不在数组中的唯一方法是首先遍历整个数组。 您的循环将在每次迭代中发出警报,直到找到匹配为止。 在return
后放置console.log
也没有意义,因为前者将永远不会执行:
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();
Javascript数组还提供了一种方便的方法来检查它们是否包含某个值。 它称为.indexOf()
,如果没有匹配项,则返回-1
:
function validateNames() {
var name = "Ben";
var nameArray = ["Bill","Barry","Zack","Will"];
return nameArray.indexOf(name) !== -1;
}
您可以使用.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或更低版本。
这将是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;
});
}
}
更好的方法是polyfill 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
轻松解决:)
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.