[英]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.