with objects example array javascript arrays ecmascript-5 ecmascript-7

javascript - objects - Soporte de navegador para array.include y alternativas



javascript array indexof with objects (2)

Lo busqué y encontré esto con respecto a encontrar una subcadena en una cadena más grande en una matriz. Array.Prototype.includes

if (t.title.includes(searchString))

Mi t es parte de un $.each que está iterando a través de una matriz más grande de objetos (cada objeto tiene una gran cantidad de información, de cadenas, fechas y demás). searchString es lo que el usuario escribió en un cuadro. Todo esto es una función de búsqueda simple para una lista que tengo en la página.

Esto funciona bien en Chrome. Pero Firefox e IE están apareciendo errores que indican

TypeError: currentTicket.title.includes is not a function

Entonces, ¿puse una señal de advertencia de que mi aplicación solo funciona en Chrome o estoy creando una función de búsqueda? Lo extraño es que la página de documentos de MDN que array.includes indica que solo Firefox admite la array.includes . array.includes , curiosamente, solo es Chrome quien lo ejecuta.


Como dice el artículo de MDN al que has vinculado, Firefox solo admite .includes en compilaciones nocturnas, otros navegadores no lo .includes en absoluto en el momento de la última actualización del artículo (es posible que Chrome se haya actualizado para .includes más adelante). Si desea admitir todos los navegadores, puede utilizar el polyfill descrito en el mismo artículo:

if (![].includes) { Array.prototype.includes = function(searchElement /*, fromIndex*/ ) { ''use strict''; var O = Object(this); var len = parseInt(O.length) || 0; if (len === 0) { return false; } var n = parseInt(arguments[1]) || 0; var k; if (n >= 0) { k = n; } else { k = len + n; if (k < 0) {k = 0;} } var currentElement; while (k < len) { currentElement = O[k]; if (searchElement === currentElement || (searchElement !== searchElement && currentElement !== currentElement)) { return true; } k++; } return false; }; }

Sin embargo, parece que su problema tiene una mejor solución, pero es difícil decirlo sin detalles específicos.


En lugar de usar una API que actualmente está marcada como "experimental", considere usar un método más ampliamente compatible, como Array.prototype.indexOf() (que también es compatible con IE).

En lugar de t.title.includes(string) puede usar t.title.indexOf(string) >= 0

También puede usar Array.prototype.filter() para obtener una nueva matriz de cadenas que cumplan con ciertos criterios, como en el siguiente ejemplo.

var arr = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"]; document.getElementById("input").onkeyup = function() { document.getElementById("output").innerHTML = arrayContainsString(arr,this.value); } document.getElementById("header").innerHTML = JSON.stringify(arr); function arrayContainsString(array, string) { var newArr = array.filter(function(el) { return el.indexOf(string) >= 0; }); return newArr.length > 0; }

<input id="input" type="text" /> <br/> <div>array contains text:<span id="output" /> </div> <div id="header"></div>