w3schools not inarray in_array exist array php javascript phpjs

php - not - jquery inarray w3schools



JavaScript equivalente de in_array de PHP() (17)

¿Hay alguna forma en JavaScript para comparar valores de una matriz y ver si está en otra matriz?

¿Similar a la función in_array de PHP?


Agregue este código a su proyecto y use el estilo de objeto en los métodos Array

if (!Array.prototype.inArray) { Array.prototype.inArray = function(element) { return this.indexOf(element) > -1; }; } //How it work var array = ["one", "two", "three"]; //Return true array.inArray("one");


Ahora hay Array.prototype.includes :

El método includes () determina si una matriz incluye un cierto elemento, devolviendo verdadero o falso según corresponda.

var a = [1, 2, 3]; a.includes(2); // true a.includes(4); // false

Sintaxis

arr.includes(searchElement) arr.includes(searchElement, fromIndex)



Encontré una gran solución jQuery here en SO.

var success = $.grep(array_a, function(v,i) { return $.inArray(v, array_b) !== -1; }).length === array_a.length;

Ojalá alguien publicara un ejemplo de cómo hacer esto en guión bajo.


Existe un proyecto llamado Locutus , implementa funciones PHP en Javascript y se in_array() , puede usarlo exactamente como lo usa en PHP.

Ejemplos de uso:

in_array(''van'', myArray); in_array(1, otherArray, true); // Forcing strict type




No, no tiene uno. Por esta razón, las bibliotecas más populares vienen con una en sus paquetes de utilidades. Consulte el inArray de jQuery en inArray y Prototype para ver ejemplos.

La implementación de jQuery es tan simple como cabría esperar:

function inArray(needle, haystack) { var length = haystack.length; for(var i = 0; i < length; i++) { if(haystack[i] == needle) return true; } return false; }

Si se trata de una cantidad sensata de elementos de matriz, lo anterior funcionará muy bien.

EDITAR : Whoops. Ni siquiera noté que querías ver si una matriz estaba dentro de otra. De acuerdo con la documentación de PHP, este es el comportamiento esperado de in_array de PHP:

$a = array(array(''p'', ''h''), array(''p'', ''r''), ''o''); if (in_array(array(''p'', ''h''), $a)) { echo "''ph'' was found/n"; } if (in_array(array(''f'', ''i''), $a)) { echo "''fi'' was found/n"; } if (in_array(''o'', $a)) { echo "''o'' was found/n"; } // Output: // ''ph'' was found // ''o'' was found

El código publicado por Chris y Alex no sigue este comportamiento. Alex es la versión oficial de Prototype''s indexOf, y Chris''s es más parecido a array_intersect de PHP. Esto hace lo que quieres:

function arrayCompare(a1, a2) { if (a1.length != a2.length) return false; var length = a2.length; for (var i = 0; i < length; i++) { if (a1[i] !== a2[i]) return false; } return true; } function inArray(needle, haystack) { var length = haystack.length; for(var i = 0; i < length; i++) { if(typeof haystack[i] == ''object'') { if(arrayCompare(haystack[i], needle)) return true; } else { if(haystack[i] == needle) return true; } } return false; }

Y esta es mi prueba de lo anterior en él:

var a = [[''p'',''h''],[''p'',''r''],''o'']; if(inArray([''p'',''h''], a)) { alert(''ph was found''); } if(inArray([''f'',''i''], a)) { alert(''fi was found''); } if(inArray(''o'', a)) { alert(''o was found''); } // Results: // alerts ''ph'' was found // alerts ''o'' was found

Tenga en cuenta que intencionalmente no amplié el prototipo de matriz, ya que generalmente es una mala idea hacerlo.


Si los índices no están en secuencia, o si los índices no son consecutivos, el código en las otras soluciones enumeradas aquí se romperá. Una solución que funcionaría un poco mejor podría ser:

function in_array(needle, haystack) { for(var i in haystack) { if(haystack[i] == needle) return true; } return false; }

Y, como bonificación, aquí está el equivalente a array_search de PHP (para encontrar la clave del elemento en la matriz:

function array_search(needle, haystack) { for(var i in haystack) { if(haystack[i] == needle) return i; } return false; }


Si necesita todos los parámetros disponibles de PHP , use esto:

function in_array(needle, haystack, argStrict) { var key = '''', strict = !!argStrict; if (strict) { for (key in haystack) { if (haystack[key] === needle) { return true; } } } else { for (key in haystack) { if (haystack[key] == needle) { return true; } } } return false; }


Si solo desea verificar si un único valor está en una matriz, entonces el código de Paolo hará el trabajo. Si desea verificar qué valores son comunes para ambas matrices, querrá algo como esto (utilizando la función inArray de Paolo):

function arrayIntersect(a, b) { var intersection = []; for(var i = 0; i < a.length; i++) { if(inArray(b, a[i])) intersection.push(a[i]); } return intersection; }

Esto devolverá una matriz de valores que están en a y b . (Matemáticamente, esta es una intersection de las dos matrices).

EDITAR: Vea el Código Editado de Paolo para la solución a su problema. :)


Si va a usarlo en una clase, y si prefiere que sea funcional (y funcione en todos los navegadores):

inArray: function(needle, haystack) { var result = false; for (var i in haystack) { if (haystack[i] === needle) { result = true; break; } } return result; }

Espero que ayude a alguien :-)


Un equivalente de in_array con underscore es underscorejs.org/#indexOf

Ejemplos:

_.indexOf([3, 5, 8], 8); // returns 2, the index of 8 _.indexOf([3, 5, 8], 10); // returns -1, not found


Array.indexOf se introdujo en JavaScript 1.6, pero no es compatible con navegadores más antiguos. Afortunadamente, los colegas de Mozilla han hecho todo el trabajo duro por ti y te han proporcionado esto para compatibilidad:

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; }; }

Incluso hay algunos fragmentos de uso útiles para su placer de scripting.


function in_array(needle, haystack){ return haystack.indexOf(needle) !== -1; }


function in_array(what, where) { var a=false; for (var i=0; i<where.length; i++) { if(what == where[i]) { a=true; break; } } return a; }


var a = [1,2,3,4,5,6,7,8,9]; var isSixInArray = a.filter(function(item){return item==6}).length ? true : false; var isSixInArray = a.indexOf(6)>=0;