metodos - recorrer array de objetos javascript
¿Cómo verificar si la propiedad del objeto existe con una variable que contiene el nombre de la propiedad? (7)
Gracias por la ayuda de todos y por presionar para deshacerse de la declaración de evaluación. Las variables debían estar entre paréntesis, no con notación de puntos. Esto funciona y está limpio, código correcto.
Cada una de estas son variables: appChoice, underI, underObstr.
if(typeof tData.tonicdata[appChoice][underI][underObstr] !== "undefined"){
//enter code here
}
Esta pregunta ya tiene una respuesta aquí:
- Acceder dinámicamente a la propiedad del objeto utilizando las respuestas de la variable 11.
Estoy comprobando la existencia de una propiedad de objeto con una variable que contiene el nombre de propiedad en cuestión.
var myObj;
myObj.prop = "exists";
var myProp = "p"+"r"+"o"+"p";
if(myObj.myProp){
alert("yes, i have that property");
};
Esto undefined
está undefined
porque está buscando myObj.myProp
pero quiero que myObj.prop
Para propiedad propia:
var loan = { amount: 150 };
if(Object.prototype.hasOwnProperty.call(loan, "amount"))
{
//will execute
}
Nota: usar Object.prototype.hasOwnProperty es mejor que loan.hasOwnProperty (..), en caso de que se haya personalizado hasOwnProperty en la cadena de prototipos (que no es el caso aquí), como
var foo = {
hasOwnProperty: function() {
return false;
},
bar: ''Here be dragons''
};
Para incluir propiedades heredadas en el hallazgo, use el operador in : (pero debe colocar un objeto en el lado derecho de ''in'', los valores primitivos arrojarán un error, por ejemplo, ''length'' en ''home'' arrojará un error, pero ''length'' en nueva cadena (''home'') no
const yoshi = { skulk: true };
const hattori = { sneak: true };
const kuma = { creep: true };
if ("skulk" in yoshi)
console.log("Yoshi can skulk");
if (!("sneak" in yoshi))
console.log("Yoshi cannot sneak");
if (!("creep" in yoshi))
console.log("Yoshi cannot creep");
Object.setPrototypeOf(yoshi, hattori);
if ("sneak" in yoshi)
console.log("Yoshi can now sneak");
if (!("creep" in hattori))
console.log("Hattori cannot creep");
Object.setPrototypeOf(hattori, kuma);
if ("creep" in hattori)
console.log("Hattori can now creep");
if ("creep" in yoshi)
console.log("Yoshi can also creep");
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
Nota: Uno puede sentirse tentado a usar el acceso a la propiedad typeof y [] como el siguiente código que no siempre funciona ...
var loan = { amount: 150 };
loan.installment = undefined;
if("installment" in loan) // correct
{
// will execute
}
if(typeof loan["installment"] !== "undefined") // incorrect
{
// will not execute
}
Puede usar hasOwnProperty()
así como in
operador.
Puede usar hasOwnProperty , pero en función de la referencia, necesita comillas al usar este método:
if (myObj.hasOwnProperty(''myProp'')) {
// do something
}
Otra forma es usarlo en el operador, pero también necesita citas aquí:
if (''myProp'' in myObj) {
// do something
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in
Una forma mucho más segura de verificar si existe una propiedad en el objeto es usar un objeto vacío o un prototipo de objeto para llamar a hasOwnProperty()
var foo = {
hasOwnProperty: function() {
return false;
},
bar: ''Here be dragons''
};
foo.hasOwnProperty(''bar''); // always returns false
// Use another Object''s hasOwnProperty and call it with ''this'' set to foo
({}).hasOwnProperty.call(foo, ''bar''); // true
// It''s also possible to use the hasOwnProperty property from the Object
// prototype for this purpose
Object.prototype.hasOwnProperty.call(foo, ''bar''); // true
Referencia de documentos web de MDN - Object.prototype.hasOwnProperty ()
if(myObj[myProp])
{
`enter code here`
}
var myProp = ''prop'';
if(myObj.hasOwnProperty(myProp)){
alert("yes, i have that property");
}
O
var myProp = ''prop'';
if(myProp in myObj){
alert("yes, i have that property");
O
if(''prop'' in myObj){
alert("yes, i have that property");
}