簡體   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