Skip to content

Instantly share code, notes, and snippets.

@uberbrady
Forked from buzzedword/gist:1317242
Created November 7, 2011 10:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save uberbrady/1344608 to your computer and use it in GitHub Desktop.
Save uberbrady/1344608 to your computer and use it in GitHub Desktop.
Add indexOf to all IE versions under IE9
<!--[if lt IE 9]> -->
<script>
/* if (!Array.prototype.indexOf) { */
Array.prototype.schmindexOf = 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) { // shortcut for verifying if it's NaN
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;
}
Array.prototype.bindexOf = function (searchElement , fromIndex) {
"use strict";
if(typeof(fromIndex)==='number' && fromIndex==fromIndex) { //catches NaN
if(fromIndex < 0) {
fromIndex=this.length + fromIndex;
}
} else {
fromIndex=0;
}
for(var i=Math.floor(fromIndex);i<this.length;i++) {
if(searchElement===this[i]) {
return i;
}
}
return -1;
}
/* } */
</script>
<!-- <![endif]-->
<script>
"use strict";
function comp(arr,val,opt) {
if(arr.schmindexOf(val,opt)!==arr.bindexOf(val,opt) || arr.bindexOf(val,opt) !==arr.indexOf(val,opt)) {
console.log("DIFFERENCE DETECTED: Index: '"+arr.indexOf(val,opt)+"' Schmindex: '"+arr.schmindexOf(val,opt)+"', Bindex: '"+arr.bindexOf(val,opt)+"' (starting from: "+opt+")");
} else {
console.log("PASS - ["+arr.join(",")+"] val: "+val+", (opt: "+opt+")");
}
}
var poop=['zero','one','two','three','four','five','six'];
var repeat=['a','b','c','a','b','c'];
var testvalues= [
//Sane values to start with
[poop,'three'],
[poop,'five'],
[poop,'one'],
//some fromIndexChecks
[repeat,'a',0],
[repeat,'a',1],
[repeat,'c',-1],
[repeat,'b',-4],
//now some false-finds
[poop,'zoogabie'],
[repeat,'a',4],
[repeat,'b',-1],
//now some crazy things
[poop,'zero',Infinity],
// [poop,'five',-Infinity], //this one fails in both
[poop,'two',NaN],
[poop,'three','fish'],
[poop,'four',{what: "does",that: "mean"}],
//floats?
[repeat,'a',0.1],
[repeat,'a',-4.9],
[repeat,'a',-3.9],
[repeat,'c',3.01]
];
//comp(poop,'five',-Infinity);
for(var test in testvalues) {
comp(testvalues[test][0],testvalues[test][1],testvalues[test][2]);
}
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment