La idea detrás de la secuencia de comandos es la siguiente: estoy filtrando la matriz original eliminando todos los valores pares de ella. A continuación, formo una nueva matriz a partir de los productos parciales de la matriz original:
// new first element = 1 * 3; // second = (first (previous multiplication) * current value) = 3 * 3 (9); // third = (previous product * current value) = 9 * 9 (81)Obtuve los resultados que quería, pero mi resultado no parece una matriz:
Input: 3 3 9 Output: 3 9 81Por favor, ayúdame a dibujar el siguiente resultado:
Input: 3 3 9 Output: 3 9 81 function modify(arr) { var result = []; arr = arr.filter(item => !(item % 2 == 0)) .reduce(function(acc, curItem) { console.log(acc * curItem); return acc * curItem; }, 1) for (let i = 0; i < result.length; i++) { arr.push(result[i]); }; return result; } console.log( modify([3,3,9]) )Puede usar reduce para realizar un seguimiento tanto de su producto acumulativo como de la matriz final:
const input = [3, 3, 9]; const output = input.reduce( (acc,val) => { const newResult = acc.cum * val; acc.result.push(newResult); acc.cum = newResult; return acc; },{cum:1, result:[]}); console.log(output.result);Como el último elemento de la matriz es siempre el producto acumulativo, también podría escribirlo así:
const input = [3, 3, 9]; const output = input.reduce( (acc,val) => { const newResult = (acc.length ? acc[acc.length-1] : 1) * val; acc.push(newResult); return acc; },[]); console.log(output);Depende de usted con cuál de estos le resulte más fácil trabajar.
Con el método Array#reduce() y el operador de spread , puede transformar su matriz como en la siguiente demostración:
let modify = (arr) => arr.reduce((acc,cur,i) => [...acc, (acc[i-1] || 1) * cur],[]); console.log( modify([3,3,9]) );O simplemente:
function modify(arr) { return arr.reduce(function(acc,cur,i) { return [...acc, (acc[i-1] || 1) * cur] }, []); } console.log( modify([3,3,9]) );O si este es un código que se ejecuta una vez, en cuyo caso no necesita una función:
let oldArray = [3,3,9]; let newArray = oldArray.reduce(function(acc,cur,i) { return [...acc, (acc[i-1] || 1) * cur] }, []); console.log( newArray );