una tablas tabla objetos objects elemento ejemplos datos con buscar array agregar javascript arrays isset

tablas - javascript indexof array of objects



Compruebe si un elemento de matriz está configurado en JS (8)

Tengo una matriz

var assoc_pagine = new Array(); assoc_pagine["home"]=0; assoc_pagine["about"]=1; assoc_pagine["work"]=2;

Lo intenté

if (assoc_pagine[var] != "undefined") {

pero no parece funcionar

Estoy usando jquery, no sé si puede ayudar.

Gracias


Esto no es un Array. Mejor declararlo así:

var assoc_pagine = {}; assoc_pagine["home"]=0; assoc_pagine["about"]=1; assoc_pagine["work"]=2;

o

var assoc_pagine = { home:0, about:1, work:2 };

Para verificar si un objeto contiene alguna etiqueta, simplemente haga algo como esto:

if(''work'' in assoc_pagine){ // do your thing };


La forma más efectiva:

if (array.indexOf(element) > 0) { alert(''Bingooo'') }

W3Schools


TLDR; Lo mejor que se me ocurre es esto: (Dependiendo de su caso de uso, hay varias formas de optimizar esta función).

function arrayIndexExists(array, index){ if ( typeof index !== ''number'' && index === parseInt(index).toString()) { index = parseInt(index); } else { return false;//to avoid checking typeof again } return typeof index === ''number'' && index % 1===0 && index >= 0 && array.hasOwnKey(index); }

Los ejemplos de la otra respuesta se acercan y funcionarán para algunos (probablemente la mayoría) propósitos, pero son técnicamente bastante incorrectos por las razones que explico a continuación.

Las matrices de Javascript solo usan teclas ''numéricas''. Cuando establece una "clave asociativa" en una matriz, en realidad está configurando una propiedad en ese objeto de matriz, no un elemento de esa matriz. Por ejemplo, esto significa que la "clave asociativa" no se repetirá cuando se use Array.forEach () y no se incluirá cuando se calcule Array.length. (La excepción para esto es que las cadenas como ''0'' se resolverán en un elemento de la matriz, pero las cadenas como ''0'' no lo harán).

Además, la verificación del elemento de matriz o la propiedad del objeto que no existe se evalúa como indefinida, pero eso en realidad no le dice que el elemento de la matriz o la propiedad del objeto aún no se ha establecido. Por ejemplo, indefinido es también el resultado que obtiene al llamar a una función que no termina con una declaración de retorno. Esto podría llevar a algunos errores extraños y dificultades para depurar el código.

Esto puede ser confuso, pero puede explorarse muy fácilmente utilizando la consola javascript de su navegador. (Utilicé Chrome, cada comentario indica el valor evaluado de la línea anterior a ella);

var foo = new Array(); foo; //[] foo.length; //0 foo[''bar''] = ''bar''; //"bar" foo; //[] foo.length; //0 foo.bar; //"bar"

Esto muestra que las claves asociativas no se utilizan para acceder a los elementos de la matriz, sino para las propiedades del objeto.

foo[0] = 0; //0 foo; //[0] foo.length; //1 foo[2] = undefined //undefined typeof foo[2] //"undefined" foo.length //3

Esto muestra que la comprobación de typeof no le permite ver si se ha establecido un elemento.

var foo = new Array(); //undefined foo; //[] foo[0] = 0; //0 foo[''0''] //0 foo['' 0''] //undefined

Esto muestra la excepción que mencioné anteriormente y por qué no puedes usar parseInt ();

Si desea utilizar matrices asociativas, es mejor utilizar objetos simples como lo recomiendan otras respuestas.


var es una declaración ... así que es una palabra reservada ... así que simplemente llámala de otra manera. Y esa es una mejor manera de hacerlo (=== es mejor que ==)

if(typeof array[name] !== ''undefined'') { alert("Has var"); } else { alert("Doesn''t have var"); }


Use la palabra clave in para probar si un atributo está definido en un objeto

if (assoc_var in assoc_pagine)

O

if ("home" in assoc_pagine)

Hay bastantes problemas aquí.

En primer lugar, ¿se supone que var es que una variable tiene el valor "home", "work" o "about"? ¿O querías inspeccionar la propiedad real llamada "var"?

Si se supone que var es una variable que tiene un valor de cadena, tenga en cuenta que var es una palabra reservada en JavaScript y necesitará usar otro nombre, como assoc_var .

var assoc_var = "home"; assoc_pagine[assoc_var] // equals 0 in your example

Si pretendía inspeccionar la propiedad llamada "var", simplemente debe ponerla entre comillas.

assoc_pagine["var"]

Entonces, undefined no es lo mismo que "undefined" . Necesitará typeof para obtener la representación de cadena del tipo de objetos.

Este es un desglose de todos los pasos.

var assoc_var = "home"; var value = assoc_pagine[assoc_var]; // 0 var typeofValue = typeof value; // "number"

Así que para solucionar tu problema

if (typeof assoc_pagine[assoc_var] != "undefined")

actualización: como han indicado otras respuestas, usar una matriz no es la mejor solución para este problema. Considere usar un objeto en su lugar.

var assoc_pagine = new Object(); assoc_pagine["home"]=0; assoc_pagine["about"]=1; assoc_pagine["work"]=2;


function isset(key){ ret = false; array_example.forEach(function(entry) { if( entry == key ){ ret = true; } }); return ret; } alert( isset("key_search") );


if (assoc_pagine.indexOf(''home'') > -1) { // we have home element in the assoc_pagine array }

Index de Mozilla


var assoc_pagine = new Array(); assoc_pagine["home"]=0;

No uses un Array para esto. Las matrices son para listas numéricamente indexadas. Solo usa un Object simple ( {} ).

Lo que estás pensando con la cadena ''undefined'' es probablemente esto:

if (typeof assoc_pagine[key]!==''undefined'')

Esto es (más o menos) lo mismo que decir

if (assoc_pagine[key]!==undefined)

Sin embargo, de cualquier manera esto es un poco feo. Está eliminando la referencia de una clave que puede no existir (lo que sería un error en un lenguaje más sensato) y confía en el truco extraño de JavaScript de proporcionarle undefined valor especial undefined para propiedades no existentes.

Esto tampoco le dice si la propiedad realmente no estaba allí, o si estaba allí, pero se estableció explícitamente en el valor undefined .

Este es un enfoque más explícito, legible e IMO integral:

if (key in assoc_pagine)