Hola, quiero devolver massToMove desde mi algoritmo. Pero no estoy definido, cuando consola.log() dentro del bucle obtuve el número correcto. ¿Por qué no está definido y cómo puedo evitarlo? Es bastante extraño porque la variable se define como '0' y se cambia dentro del bucle.
let numberOfElephants = 6; let massOfElephants = [2400, 2000, 1200, 2400, 1600, 4000]; let startOrder = [1, 4, 5, 3, 6, 2]; let endOrder = [5, 3, 2, 4, 6, 1]; const sortElephants = ( numberOfElephants, massOfElephants, elephantsOrder, proposedOrder ) => { const elephantObject = []; elephantsOrder.forEach((order, i) => { elephantObject.push({ [order]: massOfElephants[i] }); }); let massToMove = 0; for (let i = 0; i < numberOfElephants; i++) { for (let j = 0; j < numberOfElephants; j++) { if (startOrder[i] === proposedOrder[j]) { if ( startOrder.indexOf(startOrder[i]) === endOrder.indexOf(proposedOrder[j]) ) return; const indexOfCorrect = proposedOrder.findIndex( (num) => num === endOrder[j] ); const itemAtGivenOrder = startOrder[indexOfCorrect]; let isCorrect = endOrder.indexOf(itemAtGivenOrder) === startOrder.indexOf(itemAtGivenOrder); let temp; temp = startOrder[indexOfCorrect]; startOrder[indexOfCorrect] = startOrder[i]; startOrder[i] = temp; const elephantAtGivenCorrectIndex = elephantObject.find( (elephant) => elephant[itemAtGivenOrder.toString()] ); const startingElephant = elephantObject.find( (elephant) => elephant[startOrder[i]] ); if (!isCorrect) { massToMove += startingElephant[startOrder[i]]; } else { massToMove += elephantAtGivenCorrectIndex[itemAtGivenOrder] + startingElephant[startOrder[i]]; } } } } return massToMove; };console.log(sortElephants(numberOfElephants, massOfElephants, startOrder, endOrder));