繁体   English   中英

在javascript数组中寻找价值

[英]Finding value within javascript array

我试图建立一个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语句来告诉我它是否出现在数组中。

任何帮助都会很棒。

尝试从find()调用中删除撇号。 例如

notFound=myAsi.find(item.code)

尽管实际上,出于您的目的,请参见使用此功能的示例。

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现在是全球性的...

如果只想查找某项是否在数组中,则可以使用比该函数更简单的函数。 例如。 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之外的所有浏览器),否则使用手动循环。

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方法以采用一个值和一个可选的matcher函数。 如果不包含匹配器,它将进行简单的相等性检查。

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

您可以只使用内置功能

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

此行为是6年前的javascript规范中规定的。 尽管由于这些原因我在IE8左右放弃了Internet Explorer,但由于对标准的支持如此之差。 如果您想支持非常老的浏览器,则可以使用http://soledadpenades.com/2007/05/17/arrayindexof-in-internet-explorer/来添加自己的自定义Array.indexOf

我不记得支持[] .indexOf的IE9,但Microsoft声称支持:[ http://msdn.microsoft.com/zh-cn/library/ff679977( v = VS.94) .aspx

确定数组中给定值首次出现的索引的标准方法是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)返回myArraymyValue的第一个索引;如果未找到,则返回-1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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