digamos que tengo
let arr = [ {code: 5, country: 'DE', price: 8}, {code: 6, country: 'RU', price: 9}, {code: 7, country: 'US', price: 10}, {code: "FiveX", country: 'UK', price: 11}, {code: 5, country: 'ES', price: 12}, {code: 5, country: 'RU', price: 13}, {code: 7, country: 'BE', price: 14}, ]Necesito que esta matriz se reordene de la siguiente manera
arr = [ {priceDE: '8 (code5)' , priceES: '12 (code5)', priceRU: '13 (code5)'}, {priceRU: '9 (code6)'}, {priceUS: '10 (code7)', priceBE: '14 (code7)'} {priceUK: '11 (codeFiveX)'} ]Básicamente, necesito agruparlos con la referencia del código, pero realmente no entiendo cómo hacerlo sin conocer el valor del código de antemano. Tenga en cuenta que el código no siempre es un número, puede ser una cadena
En primer lugar, su declaración de matriz original es incorrecta, ya que usa DE como una variable, mientras que debería ser una cadena encapsulada entre comillas 'DE' por lo que debe reescribirla para que sea reproducible.
Por ejemplo {code: 5, country: 'DE', price: 8},
Luego, debe hacer un bucle en su matriz original, tomar los valores y reconstruir un nuevo objeto con los nuevos valores. Digo objeto y no matriz, ya que necesitamos usar una key que, en su caso, puede ser un número, por ejemplo, 5 , o una cadena, por ejemplo, FiveX .
Aquí está el fragmento resultante
let arr = [ {code: 5, country: 'DE', price: 8}, {code: 6, country: 'RU', price: 9}, {code: 7, country: 'US', price: 10}, {code: "FiveX", country: 'UK', price: 11}, {code: 5, country: 'ES', price: 12}, {code: 5, country: 'RU', price: 13}, {code: 7, country: 'BE', price: 14}, ] let new_arr = {} for(i=0; i<arr.length; i++) { let code = arr[i].code let country = arr[i].country let price = arr[i].price if (code in new_arr) { new_arr[code]['price'+country] = price } else { new_arr[code] = {} new_arr[code]['price'+country] = price } } console.log(new_arr) La matriz resultante será lo que solicitó, aparte del extraño (code5) que, si lo desea, puede agregar concatenando price+" (code"+code+")" en el bucle for .
Lo olvidé, si desea que el elemento final sea una matriz en lugar de un objeto, puede repetirlo.
let final_arr = [] for(i in new_arr) { final_arr.push(new_arr[i]) } console.log(final_arr)