繁体   English   中英

如何使用函数确定Java数组中是否存在值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM