Tengo una matriz de objetos y cuando el usuario selecciona una opción, agrega un objeto a la matriz. Quiero escribir un código para verificar si esta clave de objeto ya está en uno de los objetos de la matriz para reemplazar el anterior con el nuevo objeto. usuario seleccionado de la opción proporcionada ingrese la descripción de la imagen aquí
lo que significa que esta matriz no puede tener dos objetos con la misma clave, como
iMac 2021-Touch ID in keyboard
alguna solución estoy atascado aquí
editar:
attribute.items.map((item, index2) => { return ( <div key={index2}> <input onChange={this.handleChange} type="radio" name={`${this.props.currentItem.name}-${attribute.name}`} value={item.value} /> </div>;cuando el usuario selecciona la opción de uno de estos atributos, se agrega a una matriz que se enviará al carrito con el artículo
handleChange = (e) => { const { name, value } = e.target; this.setState((prevState) => ({ selectedAttribute: [ ...prevState.selectedAttribute, { [name]: value } ], })); };Estoy tratando de hacer algo como esto para evitar agregar dos o más objetos para el mismo atributo
let alreadyAdded = this.state.selectedAttribute.some((element) => this.state.selectedAttribute.indexOf(element) !== -1);si el usuario selecciona los atributos desde la primera vez, no habrá ningún problema; de lo contrario, si el usuario decidió cambiar el atributo, se agregará con el nuevo valor sin eliminar el anterior, la matriz de atributos tendrá más valores de los que debería, lo que causará un error
como verás en esta imagen
Puede usar el método array find o findIndex y el objeto hasOwnProperty algo así:
const items = [ { key1: value1 }, { key2: value2 }, ]; const neededKey = 'key1'; const item = items.find((item) => item.hasOwnProperty(neededKey)); find : luego, si se encuentra - actualizar, de lo contrario insertar
findIndex : luego, si se encuentra - splice , de lo contrario inserte
pero si en su caso solo se usa 1 clave en cada elemento, ¿por qué no solo usar objetos como:
const items = { key1: value1, key2: value2, }y actualizarlo directamente?
si este es el estado de reacción, puede usar algo como:
setState({ ...oldState, [neededKey]: neededValue, })para actualizar tu estado