[英]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)
返回myArray
中myValue
的第一個索引;如果未找到,則返回-1
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.