Javascript 交叉划船机;inArray“;函数(不带jQuery)
我没有意识到的交叉浏览器兼容性差。但现在我做到了,我需要找到一种方法来实现同样的事情,但不使用前面的方法 我在谷歌上搜索了一会儿,但没有找到真正令人信服的答案。目前,我正在使用循环(但这很慢,我相信还有更好的方法) 旁注:Javascript 交叉划船机;inArray“;函数(不带jQuery),javascript,arrays,Javascript,Arrays,我没有意识到的交叉浏览器兼容性差。但现在我做到了,我需要找到一种方法来实现同样的事情,但不使用前面的方法 我在谷歌上搜索了一会儿,但没有找到真正令人信服的答案。目前,我正在使用循环(但这很慢,我相信还有更好的方法) 旁注: 我不能使用jQuery或任何其他库/框架 它不一定需要返回索引(简单的true/false) (没问题) 我认为没有必要分享我的代码,因为你们都知道数组循环检查是什么样子的(而且它会降低你们的智商) 目前,我正在使用循环(但这很慢,我相信还有更好的方法) 无论你做什么,最
- 我不能使用jQuery或任何其他库/框架
- 它不一定需要返回索引(简单的true/false) (没问题)
if(!Array.prototype.indexOf){
Array.prototype.indexOf=函数(searchElement/*,fromIndex*/){
“严格使用”;
如果(this==null){
抛出新的TypeError();
}
var t=对象(本);
var len=t.length>>>0;
如果(len==0){
返回-1;
}
var n=0;
如果(arguments.length>0){
n=数量(参数[1]);
if(n!=n){//验证是否为NaN的快捷方式
n=0;
}如果(n!=0&&n!=无穷大&&n!=-无穷大){
n=(n>0 | |-1)*数学地板(数学abs(n));
}
}
如果(n>=len){
返回-1;
}
var k=n>=0?n:Math.max(len-Math.abs(n),0);
对于(;k
这将检查它是否看到本机实现,如果没有实现它
值得注意的怪癖:
t.length>>0
是一个无符号移位,用于将其强制为正数以下是inArray在jQuery中的实现方式:
function inArray(elem, array, i) {
var len;
if ( array ) {
if ( array.indexOf ) {
return array.indexOf.call( array, elem, i );
}
len = array.length;
i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
for ( ; i < len; i++ ) {
// Skip accessing in sparse arrays
if ( i in array && array[ i ] === elem ) {
return i;
}
}
}
return -1;
}
函数数组(元素、数组、i){
瓦伦;
if(数组){
if(array.indexOf){
返回array.indexOf.call(array,elem,i);
}
len=数组长度;
i=i?i<0?数学最大值(0,len+i):i:0;
对于(;i
您不能使用jQuery,但为什么不使用它们的实现呢?:-)
致以最良好的祝愿 你可以使用Mozilla提供的。你想提供
IE lt 9
和…循环一点也不坏。最可能的原因是他的老师试图让他想出自己的代码。@kennebec我是自己的老师(我靠自己和爱好学习)
function inArray(elem, array, i) {
var len;
if ( array ) {
if ( array.indexOf ) {
return array.indexOf.call( array, elem, i );
}
len = array.length;
i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
for ( ; i < len; i++ ) {
// Skip accessing in sparse arrays
if ( i in array && array[ i ] === elem ) {
return i;
}
}
}
return -1;
}