tengo la siguiente matriz
Array["MyArray", { "isLoaded":true, "items": [{ "id":"4", "name":"ProductA", "manufacturer":"BrandA", "quantity":1, "price":"25" },{ "id":"1", "name":"ProductB", "manufacturer":"BrandB", "quantity":5, "price":"20" }], "coupons":null } ]Necesito cargar nombres de productos y su cantidad de la matriz.
const result = [key, value].map((item) => `${item.name} x ${item.quantity}`);Aquí hay una forma posible de lograr el resultado deseado:
const getProductsAndQuantity = ([k , v] = arr) => ( v.items.map(it => `${it.name} x ${it.quantity}`) );¿Cómo usarlo dentro del contexto de la pregunta?
localforage.iterate(function(value, key, iterationNumber) { console.log([key, value]); const val2 = JSON.parse(value); if (val2 && val2.items && val2.items.length > 0) { console.log(val2.items.map(it => `${it.name} x ${it.quantity}`).join(', ')) }; });¿Cómo funciona?
value, key, iterationNumber , solo se requiere value .console.log([key, value]); en la preguntav (que es un objeto). En v , accede a los items con nombre de prop y estos items son una matriz..map se usa para iterar a través de la matriz y devolver el name y la quantity de cada producto en el formato deseado/esperado.Pruébelo en un fragmento de código:
const arr = [ "MyArray", { "isLoaded": true, "items": [{ "id": "4", "name": "ProductA", "manufacturer": "BrandA", "quantity": 1, "price": "25" }, { "id": "1", "name": "ProductB", "manufacturer": "BrandB", "quantity": 5, "price": "20" }], "coupons": null } ]; const getProductsAndQuantity = ([k, v] = arr) => ( v.items.map( it => `${it.name} x ${it.quantity}` ) ); console.log(getProductsAndQuantity());Entendí. Debe aprender sobre métodos de matriz como mapear, filtrar, reducir. Aquí tienes...
const items = [{ "id":"4", "name":"ProductA", "manufacturer":"BrandA", "quantity":1, "price":"25" },{ "id":"1", "name":"ProductB", "manufacturer":"BrandB", "quantity":5, "price":"20" }]; const result = items.map((item) => `${item.name} x ${item.quantity}`); console.log(result);Creo que entiendo la pregunta para decir que la entrada es una matriz de objetos, cada uno de los cuales contiene una matriz de elementos. La clave es que una matriz anidada requiere un bucle anidado. Entonces, iteramos los objetos y sus elementos internos (vea las líneas comentadas //outer loop y // inner loop continuación)
Además, adivinando a medias por el contexto, parece que el OP apunta a armar una especie de factura para cada objeto. Primero, una demostración de eso (y vea a continuación la versión simplificada para exactamente lo que pide el OP) ...
const addInvoice = obj => { let total = 0; // inner loop obj.invoice = obj.items.map(i => { let subtotal = i.quantity * i.price; total += subtotal return `name: ${i.name}, qty: ${i.quantity}, unit price: ${i.price}, subtotal: ${subtotal}` }); obj.invoice.push(`invoice total: ${total}`); } const objects = [{ "isLoaded": true, "items": [{ "id": "4", "name": "ProductA", "manufacturer": "BrandA", "quantity": 1, "price": "25" }, { "id": "1", "name": "ProductB", "manufacturer": "BrandB", "quantity": 5, "price": "20" }], "coupons": null }] // outer loop objects.forEach(addInvoice); console.log(objects); Si mi conjetura sobre el objetivo fue demasiado, simplemente elimine el precio unitario, el subtotal y las líneas totales de la función de invoice ...
const objects = [{ "isLoaded": true, "items": [{ "id": "4", "name": "ProductA", "manufacturer": "BrandA", "quantity": 1, "price": "25" }, { "id": "1", "name": "ProductB", "manufacturer": "BrandB", "quantity": 5, "price": "20" }], "coupons": null }] const summaryString = obj => { return obj.items.map(i => `${i.name}, ${i.quantity}`); } const strings = objects.map(summaryString); console.log(strings);