objects gratis findindex elemento ejemplo como chrome buscar array activar javascript internet-explorer internet-explorer-8 cross-browser

gratis - indexof javascript ejemplo



Cómo reparar Array indexOf() en JavaScript para los navegadores Internet Explorer (10)

Si ha trabajado con JavaScript en cualquier momento, sabe que Internet Explorer no implementa la función ECMAScript para Array.prototype.indexOf () [incluyendo Internet Explorer 8]. No es un gran problema, ya que puede ampliar la funcionalidad de su página con el siguiente código.

Array.prototype.indexOf = function(obj, start) { for (var i = (start || 0), j = this.length; i < j; i++) { if (this[i] === obj) { return i; } } return -1; }

¿Cuándo debo implementar esto?

¿Debería ajustarlo en todas mis páginas con la siguiente comprobación, que comprueba si existe la función de prototipo y, de no ser así, seguir adelante y extender el prototipo Array?

if (!Array.prototype.indexOf) { // Implement function here }

¿O comprueba el navegador y, si se trata de Internet Explorer, simplemente implementarlo?

//Pseudo-code if (browser == IE Style Browser) { // Implement function here }


Alternativamente, podría usar la función jArty 1.2 inArray , que debería funcionar en todos los navegadores:

jQuery.inArray( value, array [, fromIndex ] )


Con el Underscore.js

var arr=[''a'',''a1'',''b''] _.filter(arr, function(a){ return a.indexOf(''a'') > -1; })


Debe verificar si no está definido usando if (!Array.prototype.indexOf) .

Además, su implementación de indexOf no es correcta. Debe usar === lugar de == en su declaración if (this[i] == obj) , de lo contrario [4,"5"].indexOf(5) sería 1 según su implementación, lo cual es incorrecto.

Te recomiendo que uses la implementación en MDC .



Esta fue mi implementación. Esencialmente, agregue esto antes de cualquier otro script en la página. es decir, en su maestro para una solución global para Internet Explorer 8. También agregué en la función de recorte que parece ser utilizada en un conjunto de marcos.

<!--[if lte IE 8]> <script> if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(obj, start) { for (var i = (start || 0), j = this.length; i < j; i++) { if (this[i] === obj) { return i; } } return -1; }; } if(typeof String.prototype.trim !== ''function'') { String.prototype.trim = function() { return this.replace(/^/s+|/s+$/g, ''''); }; }; </script> <![endif]-->


Existe la solución oficial de Mozilla: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

(function() { /**Array*/ // Production steps of ECMA-262, Edition 5, 15.4.4.14 // Reference: http://es5.github.io/#x15.4.4.14 if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(searchElement, fromIndex) { var k; // 1. Let O be the result of calling ToObject passing // the this value as the argument. if (null === this || undefined === this) { throw new TypeError(''"this" is null or not defined''); } var O = Object(this); // 2. Let lenValue be the result of calling the Get // internal method of O with the argument "length". // 3. Let len be ToUint32(lenValue). var len = O.length >>> 0; // 4. If len is 0, return -1. if (len === 0) { return -1; } // 5. If argument fromIndex was passed let n be // ToInteger(fromIndex); else let n be 0. var n = +fromIndex || 0; if (Math.abs(n) === Infinity) { n = 0; } // 6. If n >= len, return -1. if (n >= len) { return -1; } // 7. If n >= 0, then Let k be n. // 8. Else, n<0, Let k be len - abs(n). // If k is less than 0, then let k be 0. k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); // 9. Repeat, while k < len while (k < len) { // a. Let Pk be ToString(k). // This is implicit for LHS operands of the in operator // b. Let kPresent be the result of calling the // HasProperty internal method of O with argument Pk. // This step can be combined with c // c. If kPresent is true, then // i. Let elementK be the result of calling the Get // internal method of O with the argument ToString(k). // ii. Let same be the result of applying the // Strict Equality Comparison Algorithm to // searchElement and elementK. // iii. If same is true, return k. if (k in O && O[k] === searchElement) { return k; } k++; } return -1; }; } })();



La biblioteca underscore.js tiene una función indexOf que puede usar en su lugar:

_.indexOf([1, 2, 3], 2)


Se lo recomendaría a cualquiera que busque la funcionalidad que falta:

http://code.google.com/p/ddr-ecma5/

Trae la mayor parte de la funcionalidad ecma5 que falta a los antiguos browers :)


esto funciona para mi.

if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(elt /*, from*/) { var len = this.length >>> 0; var from = Number(arguments[1]) || 0; from = (from < 0)? Math.ceil(from) : Math.floor(from); if (from < 0) from += len; for (; from < len; from++) { if (from in this && this[from] === elt) return from; } return -1; }; }