如果数组中包含值,我正在尝试设置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语句来告诉我它是否出现在数组中。
任何帮助都会很棒。
答案 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
。