Digamos que tengo la siguiente capa de datos:
{ ecommerce: { currencyCode: "USD", purchase: { actionField: { id: "1a6d5021", affiliation: "Online Store", revenue: 40, tax: 0, shipping: "", coupon: "" }, products: [ { name: "Product 1", id: "123", price: 40, category: null, quantity: 1, coupon: "disc10", type: "Service A" }, { name: "Product 4", id: "456", price: 40, category: null, quantity: 1, coupon: "disc10", type: "Service B" } ] } } } Entonces, en la matriz de product , la category siempre tiene un valor null . ¿Cómo puedo impulsar el mismo valor como type respectivamente para cada producto, mientras dejo intacto todo lo demás en la capa de datos?
En última instancia, el resultado final que estoy tratando de lograr sería así:
{ ecommerce: { currencyCode: "USD", purchase: { actionField: { id: "1a6d5021", affiliation: "Online Store", revenue: 40, tax: 0, shipping: "", coupon: "" }, products: [ { name: "Product 1", id: "123", price: 40, category: "Service A", quantity: 1, coupon: "disc10", type: "Service A" }, { name: "Product 4", id: "456", price: 40, category: "Service B", quantity: 1, coupon: "disc10", type: "Service B" } ] } } }Es fácil con un solo producto, pero no puedo encontrar cómo hacerlo cuando hay varios productos.
Gracias de antemano por tu ayuda.
Si entiendo correctamente su requisito, desea asignar el valor de tipo en la categoría para cada objeto de productos. En caso afirmativo, es sencillo.
Demostración de trabajo:
const productObj = { ecommerce: { currencyCode: "USD", purchase: { actionField: { id: "1a6d5021", affiliation: "Online Store", revenue: 40, tax: 0, shipping: "", coupon: "" }, products: [{ name: "Product 1", id: "123", price: 40, category: null, quantity: 1, coupon: "disc10", type: "Service A" }, { name: "Product 4", id: "456", price: 40, category: null, quantity: 1, coupon: "disc10", type: "Service B" } ] } } }; productObj.ecommerce.purchase.products.forEach((obj) => obj.category = obj.type); console.log(productObj);Hay dos opciones.
Empuje todo el objeto de comercio electrónico nuevamente, con todos los campos configurados ahora. Da como resultado un poco de desorden en DL y ciertos problemas de tiempo que se deben tener en cuenta al implementar el seguimiento.
Elimine/retrase el primer envío de comercio electrónico hasta que tenga toda la información y solo envíe el objeto de comercio electrónico una vez.
En la mayoría de los casos, 2 es la mejor opción. 1 puede justificarse cuando el evento que depende del objeto de comercio electrónico tiene que activarse antes de que las categorías estén disponibles para el front-end.
Probar
function createCategoryFn(category) { return (properties) => { return { name: "", id: "", price: 0, category: category, quantity: 1, coupon: "", type: category, ...properties }; }; } const createSportsProduct = createCategoryFn('Sports'); const tennisProduct = createSportsProduct({ name: 'tennis racket', id: 1, price: 100 }); const basketballProduct = createSportsProduct({ name: 'basketball', id: 2, price: 100 }); console.log(tennisProduct); console.log(basketballProduct)