Maison > interface Web > js tutoriel > Pourquoi « Array.fill() » de JavaScript crée-t-il des références au lieu de copies, et comment puis-je y remédier ?

Pourquoi « Array.fill() » de JavaScript crée-t-il des références au lieu de copies, et comment puis-je y remédier ?

Linda Hamilton
Libérer: 2024-11-30 09:50:15
original
287 Les gens l'ont consulté

Why Does JavaScript's `Array.fill()` Create References Instead of Copies, and How Can I Fix It?

Array.fill() en JavaScript : une mise en garde entre références et valeurs

Array.fill() est une méthode JavaScript utilisée pour remplir un tableau avec une valeur spécifiée. Cependant, il est important de comprendre qu'Array.fill() opère sur des références plutôt que sur des valeurs.

Le problème : référencement par rapport aux valeurs

Considérez le code suivant :

let m = Array(6).fill(Array(12).fill(0));

m[0][0] = 1;
console.log(m[1][0]); // Outputs 1 instead of 0
Copier après la connexion

Ici, nous créons une matrice 6x12 en utilisant Array.fill(). Cependant, lorsque nous définissons m0 sur 1, m1 devient également 1 de manière inattendue. En effet, Array.fill() crée des tableaux internes qui font tous référence au même objet Array.

Comportement attendu : valeurs

Au lieu de référencer, nous souhaiterons peut-être copier des valeurs à la place. En d'autres termes, changer m0 ne devrait pas affecter m1.

Solution : utiliser Array.from()

Pour forcer Array.fill() à copier les valeurs au lieu des références , nous pouvons utiliser Array.from() comme suit :

let m = Array.from({length: 6}, e => Array(12).fill(0));

m[0][0] = 1;
console.log(m[1][0]); // Outputs 0 as expected
Copier après la connexion

Array.from() garantit que chaque tableau interne est un objet distinct, empêchant ainsi une valeur involontaire partage.

Conclusion

Lorsque vous utilisez Array.fill(), soyez conscient de la différence entre les références et les valeurs. Pour les situations où vous souhaitez copier des valeurs plutôt que des références, envisagez plutôt d'utiliser Array.from().

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal