Estoy tratando de colocar los nombres de los productos comprados en un píxel publicitario para generar informes. Un ejemplo está en la siguiente imagen:
Estoy tratando de usar la siguiente función para recorrer el objeto y devolver solo los nombres, separados por comas, como una cadena dentro de una sola variable. Estoy usando el siguiente script:
function products() { var items = _rsq.executor.sentWave.order_properties.order_items; var product = ""; for (var i=0; i < items.length; i++) { product += product + _rsq.executor.sentWave.order_properties.order_items[i].name + ","; i++; } console.log(product); } products();pero solo está registrando el primer producto así: Purity Organic CBD Sleep Tea - Chamomille 15mg 18 Count,
Cualquier ayuda en lo que me estoy perdiendo sería muy apreciada. ¡Gracias!
Si solo desea que su código funcione, simplemente elimine el i++ adicional y cambie ligeramente la línea += , así:
function products() { var items = _rsq.executor.sentWave.order_properties.order_items; var product = ''; for (var i = 0; i < items.length; i++) { product += _rsq.executor.sentWave.order_properties.order_items[i].name + ','; } console.log(product); } products(); Sin embargo, sugeriría usar una de estas tres alternativas a los bucles for. Si usa métodos como estos, evitará por completo el problema de escribir accidentalmente i++ dos veces, y su código será más legible en general.
const items = [ { id: 0, name: 'Sleep', price: 24.99, }, { id: 1, name: 'Revive', price: 24.99, }, ]; const productsUsingReduce = () => { return items.slice(1).reduce((result, item) => { return `${result}, ${item.name}`; }, items[0].name); }; const productsUsingFor = () => { let result = items[0].name; items.slice(1).forEach((item) => { result += `, ${item.name}`; }); return result; }; const productsUsingJoin = () => { return items .map((item) => { return item.name; }) .join(', '); }; console.log(productsUsingReduce()); console.log(productsUsingFor()); console.log(productsUsingJoin()); La única* razón por la que he encontrado que realmente necesita un bucle for es si está usando await para ejecutar varias llamadas asincrónicas en un orden específico.
* Si se ve obligado a usar versiones antiguas de javascript/node por alguna extraña razón, es posible que termine teniendo que usar bucles for.
Cuando haces x += 2 , es lo mismo que si hicieras x = x + 2 , por lo que el segundo product en product += product debe eliminarse para obtener el resultado correcto.
Puede acortar _rsq.executor.sentWave.order_properties.order_items a solo items , porque lo declaró antes del ciclo for como items y nunca lo cambió.
Además, agregó extra i++ , que no es necesario, porque ya incrementó i en el ciclo for, específicamente al final de esta línea: for (var i=0; i < items.length; i++) .
Esto debería funcionar:
function products() { var items = _rsq.executor.sentWave.order_properties.order_items; var product = ""; for (var i=0; i < items.length; i++) { product += items[i].name + ","; } console.log(product); } products();