找到最好的方式,如果一个项目是一个JavaScript数组? [英] Best way to find if an item is in a JavaScript array?
问题描述
可能重复:结果
array.contains(OBJ)在JavaScript中
块引用>什么是找到一个对象是否是一个数组的最佳方式?
这是我所知道的最好的方式:
功能包括:(ARR,OBJ){
对于(VAR I = 0; I< arr.length;我++){
如果(ARR [I] == OBJ)返回true;
}
}包括:([1,2,3,4],3); //真
包括:([1,2,3,4],6); //未定义
解决方案功能包括:(ARR,OBJ){
回报(arr.indexOf(OBJ)!= -1);
}编辑:
这不会对IE6,7或8的工作,虽然。最好的解决方法是,如果它不是present自己定义:
<一个href=\"https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf\">Mozilla's (ECMA-262)版本:
如果(!Array.prototype.indexOf)
{ Array.prototype.indexOf =功能(searchElement / *,*的fromIndex /) {
使用严格的; 如果(这===无效0 ||这个===空)
抛出新的TypeError(); 变种T =对象(this);
VAR LEN = t.length&GT;&GT;&GT; 0;
如果(LEN === 0)
返回-1; 变种N = 0;
如果(的arguments.length大于0)
{
N =号码(参数[1]);
如果(N!== N)
N = 0;
否则如果(正== 0&放大器;&放大器; N ==(1/0)及&放大器;!!n ==可 - (1/0))
N =(N大于0 || -1)* Math.floor(Math.abs(正));
} 如果(N&GT; = LEN)
返回-1; VAR K = N'GT = 0
? ñ
:Math.max(LEN - Math.abs(n)时,0); 对于(; K&LT; LEN; k ++)
{
如果(K在T&放大器;&amp; T公司[K] === searchElement)
复位K;
}
返回-1;
};}
<一个href=\"http://stackoverflow.com/questions/143847/best-way-to-find-an-item-in-a-javascript-array#144172\">Daniel的詹姆斯版本:
如果(!Array.prototype.indexOf){
Array.prototype.indexOf =功能(OBJ,的fromIndex){
如果(的fromIndex == NULL){
的fromIndex = 0;
}否则如果(的fromIndex℃,){
的fromIndex = Math.max(0,+ this.length的fromIndex);
}
对于(VAR I =的fromIndex,J = this.length; I&LT;焦耳;我++){
如果(这[一] === OBJ)
返回我;
}
返回-1;
};
}
<一个href=\"http://stackoverflow.com/questions/143847/best-way-to-find-an-item-in-a-javascript-array#144664\">roosteronacid's版本:
Array.prototype.hasObject =(
!Array.indexOf?功能(O)
{
变种L = this.length + 1;
而(1 - = 1)
{
如果(本[1 - 1] === O)
{
返回true;
}
}
返回false;
}:函数(O)
{
回报(this.indexOf(O)== -1!);
}
);
Possible Duplicate:
array.contains(obj) in JavaScriptWhat is the best way to find if an object is in an array?
This is the best way I know:
function include(arr, obj) { for(var i=0; i<arr.length; i++) { if (arr[i] == obj) return true; } } include([1,2,3,4], 3); // true include([1,2,3,4], 6); // undefined
解决方案function include(arr,obj) { return (arr.indexOf(obj) != -1); }
EDIT: This will not work on IE6, 7 or 8 though. The best workaround is to define it yourself if it's not present:
Mozilla's (ECMA-262) version:
if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(searchElement /*, fromIndex */) { "use strict"; if (this === void 0 || this === null) throw new TypeError(); var t = Object(this); var len = t.length >>> 0; if (len === 0) return -1; var n = 0; if (arguments.length > 0) { n = Number(arguments[1]); if (n !== n) n = 0; else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) n = (n > 0 || -1) * Math.floor(Math.abs(n)); } if (n >= len) return -1; var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); for (; k < len; k++) { if (k in t && t[k] === searchElement) return k; } return -1; }; }
Daniel James's version:
if (!Array.prototype.indexOf) { Array.prototype.indexOf = function (obj, fromIndex) { if (fromIndex == null) { fromIndex = 0; } else if (fromIndex < 0) { fromIndex = Math.max(0, this.length + fromIndex); } for (var i = fromIndex, j = this.length; i < j; i++) { if (this[i] === obj) return i; } return -1; }; }
roosteronacid's version:
Array.prototype.hasObject = ( !Array.indexOf ? function (o) { var l = this.length + 1; while (l -= 1) { if (this[l - 1] === o) { return true; } } return false; } : function (o) { return (this.indexOf(o) !== -1); } );
这篇关于找到最好的方式,如果一个项目是一个JavaScript数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!