Estoy creando una tienda online. El producto tiene atributos (en este caso, la computadora iMac tiene atributos como: capacidad, funciones usb y teclado digital). Guardo los atributos en mi estado. 
El problema es que, cada vez que cambio, por ejemplo, de una capacidad de 256 GB a una capacidad de 512 GB, se agrega un objeto completamente nuevo con {capacity:"512GB"} a la matriz.
¿Cómo configuro mi función de controlador (código a continuación) para que verifique condicionalmente si el objeto en una matriz ya tiene la tecla 'Capacidad' y lo actualiza a una nueva selección, en lugar de agregar otro objeto? Lo intenté todo, estoy desesperado.
el controlador recibe el objeto con el par clave-valor, y la clave (como label ) en sí misma, y el tipo. En este caso, se puede ignorar el tipo.
const handleAttributeChange = (object, type, label) => { if (type == "text") { this.setState({ selectedAttributes: { id: id, text: [...this.state.selectedAttributes.text, object], swatch: this.state.selectedAttributes.swatch, }, }); } else if ((type = "swatch")) { this.setState({ selectedAttributes: { id: id, text: this.state.selectedAttributes.text, swatch: [...this.state.selectedAttributes.swatch, object], }, }); } };En lugar de una matriz, puede tomar objetos con valores clave diff. Si las claves son únicas. Más tarde, puede convertirlo en la lista de valores.
let obj = {}; const update = (o) => { obj = { ...obj, ...o }; }; /* In case you know key, value */ const update2 = (key, value) => { obj[key] = value; }; console.log(obj); update({ a: 1 }); update({ b: 2 }); console.log(obj); // { a: 1, b: 2 } update({ a: 3 }); console.log(obj); // { a: 3, b: 2 } console.log(Object.entries(obj).map(([key, value]) => ({ [key]: value }))); //[ { a: 3 }, { b: 2 } ]