ultimo - indexof javascript ejemplo
¿Cómo encontrar si una matriz contiene una cadena específica en JavaScript/jQuery? (5)
Esta pregunta ya tiene una respuesta aquí:
¿Alguien me puede decir cómo detectar si "specialword"
aparece en una matriz? Ejemplo:
categories: [
"specialword"
"word1"
"word2"
]
Aqui tienes:
$.inArray(''specialword'', arr)
Esta función devuelve un entero positivo (el índice de matriz del valor dado), o -1
si el valor dado no se encontró en la matriz.
Demostración en vivo: http://jsfiddle.net/simevidas/5Gdfc/
Probablemente quieras usar esto así:
if ( $.inArray(''specialword'', arr) > -1 ) {
// the value is in the array
}
No me gusta $.inArray(..)
, es el tipo de solución fea, jQuery-ish que la mayoría de las personas sanas no tolerarían. Aquí hay un fragmento que agrega un método simple de contains(str)
a tu arsenal:
$.fn.contains = function (target) {
var result = null;
$(this).each(function (index, item) {
if (item === target) {
result = item;
}
});
return result ? result : false;
}
Del mismo modo, podría envolver $.inArray
en una extensión:
$.fn.contains = function (target) {
return ($.inArray(target, this) > -1);
}
Puedes usar un bucle for
:
var found = false;
for (var i = 0; i < categories.length && !found; i++) {
if (categories[i] === "specialword") {
found = true;
break;
}
}
Realmente no necesitas jQuery para esto.
var myarr = ["I", "like", "turtles"];
var arraycontainsturtles = (myarr.indexOf("turtles") > -1);
o
function arrayContains(needle, arrhaystack)
{
return (arrhaystack.indexOf(needle) > -1);
}
Vale la pena señalar que array.indexOf(..)
no es compatible con IE <9 , pero la función indexOf(...)
jQuery funcionará incluso para las versiones anteriores.
jQuery ofrece $.inArray
:
Tenga en cuenta que inArray devuelve el índice del elemento encontrado, por lo que 0
indica que el elemento es el primero en la matriz. -1
indica que el elemento no fue encontrado.
var categoriesPresent = [''word'', ''word'', ''specialword'', ''word''];
var categoriesNotPresent = [''word'', ''word'', ''word''];
var foundPresent = $.inArray(''specialword'', categoriesPresent) > -1;
var foundNotPresent = $.inArray(''specialword'', categoriesNotPresent) > -1;
console.log(foundPresent, foundNotPresent); // true false
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Editar 3.5 años después
$.inArray
es efectivamente un envoltorio para Array.prototype.indexOf
en los navegadores que lo admiten (casi todos ellos en la $.inArray
), a la vez que proporciona un apoyo para aquellos que no lo son. Es esencialmente equivalente a agregar un shim al Array.prototype
, que es una forma más idiomática / de hacer las cosas. MDN proporciona tal código . Estos días tomaría esta opción, en lugar de usar el contenedor jQuery.
var categoriesPresent = [''word'', ''word'', ''specialword'', ''word''];
var categoriesNotPresent = [''word'', ''word'', ''word''];
var foundPresent = categoriesPresent.indexOf(''specialword'') > -1;
var foundNotPresent = categoriesNotPresent.indexOf(''specialword'') > -1;
console.log(foundPresent, foundNotPresent); // true false
Edita otros 3 años después.
Dios mío, 6,5 años?
La mejor opción para esto en Javascript moderno es Array.prototype.includes
:
var found = categories.includes(''specialword'');
No hay comparaciones y no hay resultados confusos -1
. Hace lo que queremos: devuelve true
o false
. Para los navegadores más antiguos, se puede rellenar con el código de MDN .
var categoriesPresent = [''word'', ''word'', ''specialword'', ''word''];
var categoriesNotPresent = [''word'', ''word'', ''word''];
var foundPresent = categoriesPresent.includes(''specialword'');
var foundNotPresent = categoriesNotPresent.includes(''specialword'');
console.log(foundPresent, foundNotPresent); // true false