Tengo esta matriz:
var arr = [ { itemCategory: "cats", itemSku: "12345", itemSubTotal: 10, itemQuantity: 2, }, { itemCategory: "dogs", itemSku: "56789", itemSubTotal: 5, itemQuantity: 1, } ]
y necesito este formato:
var arr = [ { itemCategory1: "cats", itemSku1: "12345", itemSubTotal1: 10, itemQuantity1: 2, }, { itemCategory2: "dogs", itemSku2: "56789", itemSubTotal2: 5, itemQuantity2: 1, } ]
¿Cómo tomo el número de índice del objeto actual y lo agrego a la clave del objeto? Lo mejor que pude hacer es esto:
var newArr=[]; for (var i = 0; i < arr.length; i++){ var obj = arr[i]; for (var key in obj){ var value = obj[key]; var j = i; j = j+=1; newArr.push(key + j + ": " + value); } }
pero solo me da una matriz plana:
0: "itemCategory1: cats" 1: "itemSku1: 12345" 2: "itemSubTotal1: 10" 3: "itemQuantity1: 2" 4: "itemCategory2: dogs" 5: "itemSku2: 56789" 6: "itemSubTotal2: 5" 7: "itemQuantity2: 1"
Aprecio que solo lo estoy insertando en una matriz, pero no pude descubrir cómo actualizar las claves de objeto con esos números de índice.
Gracias por cualquier ayuda; muy apreciado.
Demostración de trabajo:
// Input array let arr = [ { itemCategory: "cats", itemSku: "12345", itemSubTotal: 10, itemQuantity: 2, }, { itemCategory: "dogs", itemSku: "56789", itemSubTotal: 5, itemQuantity: 1, } ]; // Calculation to add index in each property of an object. arr.forEach((obj, index) => { Object.keys(obj).forEach((item) => { obj[item + (index + 1)] = obj[item]; delete obj[item]; }) }); // Result console.log(arr);
En tu código, esta línea:
newArr.push(key + j + ": " + value);
debería ser esto:
newArr.push({[key + j]: value});
Pensé que sería más limpio asignar las claves a un nuevo objeto
let arr = [{ itemCategory: "cats", itemSku: "12345", itemSubTotal: 10, itemQuantity: 2, }, { itemCategory: "dogs", itemSku: "56789", itemSubTotal: 5, itemQuantity: 1, } ] arr = arr.map((a, i) => { let n = {} Object.keys(a).forEach(k => n[k + (i + 1)] = a[k]); return n; }) console.log(arr)