在javascript数组中查找值

时间:2011-05-12 13:27:37

标签: javascript arrays if-statement

如果数组中包含值,我正在尝试设置IF语句。

我发现了一些声称有效的代码,但似乎并没有。

var myAsi = ['01','02','24OR01','30De01','9thC01','A.Hu01','A01','AACAMSTE','ABBo01','ABBo02','ABC-01','ACCE01','Acce02','AceR01','h+dm01','Merr02','Ofak01','Wage01','Youn01'];

Array.prototype.find = function(searchStr) {
  var returnArray = false;
  for (i=0; i<this.length; i++) {
    if (typeof(searchStr) == 'function') {
      if (searchStr.test(this[i])) {
        if (!returnArray) { returnArray = [] }
        returnArray.push(i);
      }
    } else {
      if (this[i]===searchStr) {
        if (!returnArray) { returnArray = [] }
        returnArray.push(i);
      }
    }
  }
  return returnArray;
}

var resultHtml = '';
resultHtml+='<table style ="width: 400px">';
resultHtml+='<tr colspan="2">';
resultHtml+='<td colspan="2">';
resultHtml+='<b><font color = "Red">(Client Code)</font><br><font color = "green">(Company Name)</font></b>';
resultHtml+='</td>';
resultHtml+='</tr>';

$.each(data, function(i,item){
  resultHtml+='<div class="result">';
  resultHtml+='<tr>';
  if (notFound=myAsi.find("'"+item.code+"'") == false) {
    resultHtml+='<td>';
  }
  else {
    resultHtml+='<td bgcolor=#D8D8D8>';
  }
  resultHtml+='<font color = "red">'+item.code+'</font><br>';
  resultHtml+='<font color = "green">'+item.content+'</font></td>';
  resultHtml+='<td style ="width: 80px"><a href="delete.php?UserID=<?php echo $userID ?>&AddCode='+item.code+'">Remove</a> - ';
  resultHtml+='<a href="insert.php?UserID=<?php echo $userID ?>&AddCode='+item.code+'">Add</a>';
  resultHtml+='</td>';
  resultHtml+='</tr>';
  resultHtml+='</div>';
  });
resultHtml+='</table>';

item.code循环,我需要一个IF语句来告诉我它是否出现在数组中。

任何帮助都会很棒。

5 个答案:

答案 0 :(得分:1)

尝试从find()电话中删除撇号。例如

notFound=myAsi.find(item.code)

实际上,为了您的目的,请参阅使用此功能的this example ....

Array.prototype.find = function(searchStr) {
       for (var i=0; i<this.length; i++) {
           if (this[i]==searchStr) return true;
       };
     return false;    
    };

另外一点 - 在使用变量之前要非常小心使用var - 否则你会创建一个全局变量(你可能不想要它)。即原始函数中的行......

for (i=0; i<this.length; i++)

i现已全球化......

答案 1 :(得分:1)

如果您只想查找某个项是否在数组中,您可以使用比此更简单的函数。例如。 jQuery实现:

// returns index of the element or -1 if element not present
function( elem, array ) {
    if ( array.indexOf ) {
        return array.indexOf( elem );
    }
    for ( var i = 0, length = array.length; i < length; i++ ) {
        if ( array[ i ] === elem ) {
            return i;
        }
    }
    return -1;
},

这使用了indexOf的本地浏览器实现(如果可用的话)(除了IE之外的所有浏览器),否则是手动循环。

答案 2 :(得分:1)

Array.prototype.contains = function(value, matcher) {
    if (!matcher || typeof matcher !== 'function') {
        matcher = function(item) {
            return item == value;
        }
    }
    for (var i = 0, len = this.length; i < len; i++) {
        if (matcher(this[i])) {
            return true;
        }
    }
    return false;
};

对于满足匹配器中定义的条件的数组中的元素,返回true。像这样实施:

var arr = ['abc', 'def', 'ghi'];   // the array
var valueToFind= 'xyz';  // a value to find in the array

// a function that compares an array item to match
var matcher = function(item) {
    return item === matchThis;
};

// is the value found?
if (arr.contains(valueToFind, matcher)) {
    // item found 
} else {
    // item not found 
}

更新: 更改了contains方法以获取值和可选的匹配器函数。如果不包含匹配器,它将进行简单的相等检查。

在jsFiddle.net上测试:http://jsfiddle.net/silkster/wgkru/3/

答案 3 :(得分:0)

你可以使用内置函数

['a','b','c'].indexOf('d') == -1

此行为是在6年前的javascript规范中强制执行的。虽然我在IE8附近因为这些原因放弃了Internet Explorer,但由于对标准的支持非常差。如果您关心支持非常旧的浏览器,可以使用http://soledadpenades.com/2007/05/17/arrayindexof-in-internet-explorer/来处理自己的自定义Array.indexOf

我不记得IE9支持[] .indexOf,但微软声称它支持[{3}}

答案 4 :(得分:0)

确定数组中给定值第一次出现的索引的标准方法是Array对象的indexOf方法。

此代码检查是否支持此方法,如果没有,则执行它,以便它可在任何Array对象上使用:


if(Array.prototype.indexOf==null)
Array.prototype.indexOf = function(x){
    for(var i=0, n=this.length; i<n; i++)if(this[i]===x)return i;
    return -1;
};

现在myArray.indexOf(myValue)会返回myValue myArray的第一个索引,如果找不到,则返回-1