Estoy atravesando un objeto que tiene una matriz de objetos dentro de una propiedad y debo acceder a la identificación de un objeto para verificar qué colores de mis objetos tienen la misma identificación y hacer una matriz de los diferentes colores de la misma identificación para mostrarlo en la interfaz como un concatenado. Espero que puedas ayudarme.
Aquí les dejo la imagen del objeto sobre el cual estoy obteniendo los ids y colores
ingrese la descripción de la imagen aquí
Los dm_id son los que necesito para poder hacer el arreglo color_bom_header con el mismo dm_id
Aquí está el código que hace que esto suceda, pero no funciona bien :(
this.state.stylesArray = this.props.location.state.stylesCombo.components.map((index, current) => { const col = this.state.stylesCombo.components && (this.state.stylesCombo.components[current].style_colors = index.color_bom_name) if(this.state.stylesCombo.components && this.state.stylesCombo.components[current].dm_id === index.dm_id){ if(this.state.stylesCombo.components[current].dm_name === index.dm_name){ this.state.colorStArray.push(col) this.state.cstarr = [...new Set(this.state.colorStArray)] } }else{ this.state.stylesCombo.components && (this.state.stylesCombo.components[current].style_colors = current.color_bom_name) } this.state.stylesCombo.components && (this.state.stylesCombo.components[current].style_colors = this.state.cstarr) })también he probado con esto pero estoy atascado
this.state.stylesArray = this.props.location.state.stylesCombo.components.map((current, index) => { for (current.dm_id in this.props.location.state.stylesCombo && this.props.location.state.stylesCombo.components) { if(current.dm_id === index.dm_id){ }else{ } } this.state.stylesCombo.components && (this.state.stylesCombo.components[index].style_colors = this.state.colorStArray) })Entonces, la tarea es hacer una matriz de elementos con la misma ID.
Necesitamos contar de alguna manera cuántos elementos de cada ID se presentan. Podemos hacer eso con un objeto.
const counter = {} for (const el of arr) { // if counter has element with given ID, increase the counter, otherwise initialize to 1 counter[el.id] = (counter[el.id] || 0) + 1; }Luego encontramos ID que tienen el conteo máximo
const max = Object.entries(counter).reduce((acc, curr) => { if (acc.length === 0) return curr; const [currKey, currVal] = curr; const [maxKey, maxVal] = acc; return currVal > maxVal ? curr : acc }, [])[0]Y luego filtramos nuestro estado
state.filter(element => element.id === max); // or if `element.id` is of type number // you need to cast `max` to Number first const newMax = Number(max); state.filter(element => element.id === newMax);No estoy seguro de no haber complicado demasiado la lógica, pero esa es la forma en que se me ocurrió.