Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

136
Vistas
Verifique si cierta clave de objeto Javascript tiene valores anidados exactos y luego actualice el valor anidado específico

Tengo un objeto Javascript que puede tener ninguna, una o varias claves. Entonces cada clave tiene un valor anidado.

Ejemplo

 cart = { "98eb9514-f403-4d08-b5f7-dd6a5ec013cb": { "quantity": 1, "FirstName": "John", "LastName": "Lewis" }, "92ef2918-6bc2-4f3b-b9b3-acf6ebe74b1f": { "quantity": 1, "FirstName": "Matthew", "LastName": "Smith" } }

Necesito verificar si una clave tiene un valor anidado exacto. Si es así, entonces necesito agregar 1 a la cantidad de esa clave exacta con ese valor anidado exacto.

Puedo verificar si existe una clave exacta con ese valor anidado exacto haciendo:

 if (cart.hasOwnProperty(productId) && cart[productId]["quantity"] >= 1 && cart[productId]["FirstName"] == FirstName && cart[productId]["LastName"] == LastName) { console.log('add one to qty somehow...') }

Sin embargo, esto parece muy ineficiente y ni siquiera puedo encontrar una manera de agregar uno a la cantidad solo para esa clave exacta con ese valor anidado exacto.

Si no está claro, mi pregunta se reduce a esto: ¿Cómo compruebo si existe una clave con un valor anidado exacto y, si existe, cómo agrego 1 a la cantidad para esa misma clave/valor anidado exacto?

He estado trabajando en esto durante un día y medio. Cualquier ayuda es muy apreciada.

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Podrías hacerlo así:

 const cart = { "98eb9514-f403-4d08-b5f7-dd6a5ec013cb":{"quantity":1,"FirstName":"John", "LastName":"Lewis"}, "92ef2918-6bc2-4f3b-b9b3-acf6ebe74b1f":{"quantity":1,"FirstName":"Matthew", "LastName":"Smith"} } const productId = "92ef2918-6bc2-4f3b-b9b3-acf6ebe74b1f"; const firstName = "Matthew"; const lastName = "Smith"; const quantity = 1; const cartItem = cart[productId]; if(typeof cartItem !== "undefined" && cartItem.FirstName === firstName && cartItem.LastName === lastName && cartItem.quantity >= 1) { cartItem.quantity += 1; }; console.log(cart);

Una vez que tenga un identificador en la propiedad de carrito prevista, simplemente puede incrementar su propiedad de quantity .

about 4 years ago · Juan Pablo Isaza Denunciar

0

Si necesita una igualdad profunda basada solo en propiedades enumerables (es decir, los valores que obtiene cuando usa for...of u Object.keys , etc.), puede determinar la igualdad en función de la serialización JSON de esos objetos, siempre que fuerce la clasificación de claves , utilizando el argumento de reemplazo del que rara vez se replacer para JSON.stringify() .

Esta es una característica increíblemente poderosa del proceso de serialización JSON, y podemos escribir una función simple que garantizará que cualquier objeto que pasemos siempre se serialice en la misma cadena JSON, independientemente del orden de las claves en cualquier profundidad:

 function sortedObjectKeys(_, data) { // Ignore primitives. if (data === null) return null; if (typeof data !== "object") return data; // Also ignore iterables, which are type "object" but // should not be sorted because [1,2,3] is not [1,3,2]. if (data.__proto__[Symbol.iterator]) return data; // Then sort the object keys and yield a new object with that // ordering enforced by key insertion. return Object.fromEntries(Object.entries(data).sort()); }

Ahora podemos realizar una prueba de igualdad profunda utilizando la igualdad de cadenas:

 function deepEqual(o1, o2) { const s1 = JSON.stringify(o1, sortedObjectKeys); const s2 = JSON.stringify(o2, sortedObjectKeys); return s1 === s2; }
about 4 years ago · Juan Pablo Isaza Denunciar

0

 let cart = { "98eb9514-f403-4d08-b5f7-dd6a5ec013cb": { "quantity": 1, "FirstName": "John", "LastName": "Lewis" }, "92ef2918-6bc2-4f3b-b9b3-acf6ebe74b1f": { "quantity": 1, "FirstName": "Matthew", "LastName": "Smith" } } let productId = '98eb9514-f403-4d08-b5f7-dd6a5ec013cb'; // any product key let valueToMAtch = 1; // any value to match let productKey = Object.keys(cart).find((key) => key === productId); Object.entries(cart[productKey] || {}).forEach(([key, value]) => { // || {} allows undefined handing if no product is found if (value === valueToMAtch) { cart[productKey][key] += 1; // adding one } }); console.log(cart); // result

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda