如何使用函数确定 Javascript 数组中是否存在某个值?
How can I use a Function to determine if a Value exists in a Javascript Array?
我将使用一个输入字段,人们可以在其中输入一个值。
我创建了他们将输入的变量:'Ben'.
我希望函数通过 nameArray 和 return 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]);
}
}
}
让循环逻辑知道该值不在数组中的唯一方法是首先遍历整个数组。您的循环将在每次迭代时发出警报,直到找到匹配项。将 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();
Javascript 数组还提供了一种方便的方法来检查它们是否包含某个值。它被称为 .indexOf()
,当没有匹配时它被称为 returns -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
class 中,这样您就不必每次都输入该方法。
// 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;
}
我将使用一个输入字段,人们可以在其中输入一个值。
我创建了他们将输入的变量:'Ben'.
我希望函数通过 nameArray 和 return 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]);
}
}
}
让循环逻辑知道该值不在数组中的唯一方法是首先遍历整个数组。您的循环将在每次迭代时发出警报,直到找到匹配项。将 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();
Javascript 数组还提供了一种方便的方法来检查它们是否包含某个值。它被称为 .indexOf()
,当没有匹配时它被称为 returns -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
class 中,这样您就不必每次都输入该方法。
// 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;
}