Évitez les mutations
Si vous devez éviter les mutations, par exemple si vous devez diviser un tableau en réaction, vous ne voulez pas muter l'original car cela pourrait entraîner un comportement très étrange dans votre application.
Qu'est-ce qu'une mutation?
Une mutation est lorsque vous changez un non-primitif, comme un objet ou un tableau. Utiliser une méthode de tableau comme splice modifiera le tableau d'origine. Vous pouvez toujours dire si une méthode mutera en fonction du fait qu'elle retourne ou non un nouvel tableau ou un nouvel objet.
Pourquoi les mutations peuvent-elles être "mauvaises"?
Lorsque vous mutez un objet ou un tableau, vous modifiez cette référence d'origine. Cela signifie que si vous utilisez la référence d'origine, vous obtiendrez la nouvelle valeur. Cela est mieux illustré par un exemple.
// faire un nouvel objet
const myObj = { key: "une valeur" };
// attribuer un nouvel objet constant à l'objet (cela est attribué par référence)
const newObj = myObj;
// changer la valeur d'une clé dans la nouvelle constante
newObj.key = "une autre valeur";
// enregistrer l'objet d'origine et voir que sa valeur a été modifiée
console.log(myObj) // affichera { key: "une autre valeur" };
Comme vous pouvez le voir, l'objet myObj
a également eu la valeur de la clé modifiée. Choses effrayantes.
Utilisez Slice
Vous pouvez contourner cela en utilisant slice
au lieu de splice
Exemple
let votreTableau = props.someArray;
let milieu = Math.floor(votreTableau.length / 2)
// ou au lieu du plancher, vous pouvez utiliser le plafond en fonction de quel côté obtient les données supplémentaires
let premierDemiTableau = votreTableau.slice(0, milieu);
let deuxiemeDemiTableau = votreTableau.slice(milieu, votreTableau.length);
2 votes
Comment pourriez-vous déterminer la taille de chaque moitié que vous voulez ?
3 votes
-1 parce que vous pouvez le déterminer juste en y réfléchissant. Quel sera le point médian - l'argument de
splice
- lorsque la taille du tableau est deN
? Et comment déterminez-vousN
?1 votes
Que se passe-t-il s'il y a un nombre impair? Il n'y a pas de 'Moitié'.... juste en train de dire!