J'essaie de comprendre pourquoi cette partie - arr.splice (index, 1) .push (0)
- de mon code ne fonctionne pas.
pourquoi ne puis-je pas épisser puis pousser?
var moveZeros = function (arr) { const newArray = arr.map((element, index) => element === 0 ? arr.splice(index, 1).push(element) : console.log(index, element)) }
3 Réponses :
splice
renvoie un tableau des éléments supprimés. Si vous faites
const moveZeros = (arr) => { const zeros = []; return arr .filter((elm) => { if (elm === 0) { zeros.push(0); return false; } return true; }) .concat(zeros); }; console.log(moveZeros([0, 1, 2, 3])); console.log(moveZeros([3, 2, 1,0, 1, 2, 3]));
, vous poussez vers le tableau des zéros supprimés (et cette expression est ensuite supprimée immédiatement après).
Vous ne devez pas non plus muter un tableau tout en l'itérant - cela entraînera un comportement très déroutant.
Envisagez de filtrer les zéros, tout en poussant vers un tableau de zéros à la place, puis combinez les deux tableaux par la suite:
arr.splice(index, 1).push(0)
Vous pouvez effectuer un tri à la place et déplacer tous les zéros à la fin. Cette approche repose sur des agents utilisateurs modernes qui conservent un tri stable pour les éléments égaux (les onces whoes callback retournent zéro).
var array = [0, 1, 9, 2, 0, 0, 3, 5, 4, 2]; array.sort((a, b) => !a - !b); console.log(array)
Array.splice () renvoie un tableau des éléments qui sont supprimés du tableau sur lequel splice () a été appelé. Trouvez la documentation ici: Documentation Array.splice ()
Vous pouvez atteindre votre objectif en suivant l'extrait de code:
let arr = [1, 0, 2, 0, 1, 0, 1, 0, 1, 0] var moveZeros = function (arr) { let zeroes = []; let a = arr.reduce((finalArray, element) => { element === 0 ? zeroes.push(element) : finalArray.push(element) return finalArray; }, []); return [...a, ...zeroes]; } console.log(moveZeros(arr));