Necesito agrupar dos objetos en una matriz de objetos.
Objetos iniciales:
{strIngredient1: 'Light rum', strIngredient2: 'Lime', strIngredient3: 'Sugar', strIngredient4: 'Mint', strIngredient5: 'Soda water'} {strMeasure1: '2-3 oz ', strMeasure2: 'Juice of 1 ', strMeasure3: '2 tsp ', strMeasure4: '2-4 '}Me gustaría que la matriz final de objeto se vea así:
[ {ingredient: 'Light rum', measure: '2-3 oz'}, {ingredient: 'Lime', measure: 'Juice of 1'}, etc... (if no measure, fill with empty string) ]He intentado analizar los objetos en dos matrices en función de las claves y los valores, luego recorrer ambas matrices y generar los valores en función del número en las claves, sin embargo, tiene que haber una forma más eficiente de obtener el resultado deseado. ¿Alguna sugerencia?
Puede recorrer las claves del objeto de ingredientes y crear la matriz deseada cortando el número de ingrediente y buscando la medida correspondiente para ese número.
const ingredients = { strIngredient1: "Light rum", strIngredient2: "Lime", strIngredient3: "Sugar", strIngredient4: "Mint", strIngredient5: "Soda water" }, measurements = { strMeasure1: "2-3 oz", strMeasure2: "Juice of 1", strMeasure3: "2 tsp", strMeasure4: "2-4" }, result = Object.keys(ingredients).map((k) => ({ ingredient: ingredients[k], measure: measurements[`strMeasure${k.slice(13)}`] ?? "", })); console.log(result);Podrías separar las llaves y construir un nuevo objeto.
const data = [{ strIngredient1: 'Light rum', strIngredient2: 'Lime', strIngredient3: 'Sugar', strIngredient4: 'Mint', strIngredient5: 'Soda water' }, { strMeasure1: '2-3 oz ', strMeasure2: 'Juice of 1 ', strMeasure3: '2 tsp ', strMeasure4: '2-4 ' }], keys = { strIngredient: 'ingredient', strMeasure: 'measure' }, result = data.reduce((r, o, i) => { Object.entries(o).forEach(([key, value]) => { const [, k, i] = key.match(/^(.*?)(\d+)$/); (r[i - 1] ??= { ingredient: '', measure: '' })[keys[k]] = value; }); return r; }, []); console.log(result);