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

时间:2015-03-17 16:09:49

标签: javascript arrays function return-value

我将使用一个人输入值的输入字段 我创建了他们将输入的变量:'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]);
        }
    }
}

4 个答案:

答案 0 :(得分:2)

循环逻辑知道值不在数组中的唯一方法是首先遍历整个数组。您的循环将在每次迭代时发出警报,直到找到匹配为止。将console.log放在return之后也没有意义,因为前者永远不会执行:

&#13;
&#13;
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;
&#13;
&#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;
}