Tengo un objeto que está estructurado así (versión simplificada):
{ "customConfig": { "homepage": { "url": "path/to/homepage", "base_path": "www.stackoverflow.com" }, "portfolio": { "url": "path/to/portfolio", "base_path": "www.github.com" }, "moreStuff": { //... } } Ahora quiero verificar si existe un valor de cadena específico (en mi caso para la clave base_path ).
Entonces, ¿cómo puedo verificar si, por ejemplo, la cadena
www.github.comexiste en mi objetocustomConfigpara la clavebase_path?
Un valor de retorno booleano sería suficiente aquí.
El OP necesita utilizar Object.values para recuperar una matriz de todos los valores de propiedad del objeto de configuración. Luego, el OP quiere saber si some condición como el valor base_path de dicho valor/elemento es igual a una determinada dirección.
console.log( "does object contain an item where `base_path` equals 'www.github.com' ?", Object.values({ "homepage": { "url": "path/to/homepage", "base_path": "www.stackoverflow.com" }, "portfolio": { "url": "path/to/portfolio", "base_path": "www.github.com" }, "moreStuff": { //... } }).some(item => item.base_path === 'www.github.com') );Podrías usar una función recursiva.
Para encontrar una clave determinada, llame a hasOwnProperty (o use includes en Object.keys ) en cada nivel de anidamiento para ver si la clave se encuentra allí.
Para encontrar un valor determinado, use includes en Object.values() .
Para encontrar un par clave/valor, encuentre la clave (como se indica arriba) y verifique que el valor de esa clave sea el valor buscado:
const containsKey = (obj, key) => Object(obj) === obj && ( obj.hasOwnProperty(key) || Object.values(obj).some(child => containsKey(child, key)) ); const containsValue = (obj, value) => Object(obj) === obj && ( Object.values(obj).includes(value) || Object.values(obj).some(child => containsValue(child, value)) ); const containsKeyValue = (obj, key, value) => Object(obj) === obj && ( obj.hasOwnProperty(key) && obj[key] === value || Object.values(obj).some(child => containsKeyValue(child, key, value)) ); // Example run: let data = { "customConfig": { "homepage": { "url": "path/to/homepage", "base_path": "www.stackoverflow.com" }, "portfolio": { "url": "path/to/portfolio", "base_path": "www.github.com" }, "moreStuff": { //... } } }; console.log(containsKey(data, "base_path")); // true console.log(containsValue(data, "www.github.com")); // true console.log(containsKeyValue(data, "base_path", "www.github.com")); // truePuedes intentar algo como
let obj = { "customConfig": { "homepage": { "url": "path/to/homepage", "base_path": "www.stackoverflow.com" }, "portfolio": { "url": "path/to/portfolio", "base_path": "www.github.com" } } } let exist = Object.keys(obj.customConfig).filter(page => obj.customConfig[page]['base_path'] == 'www.github.com').length>0; console.log(exist);