Set vs Array en JavaScript : quand utiliser lequel ?
JavaScript fournit deux structures de données puissantes pour stocker les collections : Set
et Array
. Bien que les deux puissent stocker plusieurs valeurs, leurs caractéristiques uniques les rendent mieux adaptés à différents scénarios. Voyons quand et pourquoi choisir l’un plutôt que l’autre.
-
Valeur unique par défaut
Set
La fonctionnalité la plus notable est sa gestion automatique des doublons.
// 数组允许重复 const arr = [1, 2, 2, 3, 3, 4]; console.log(arr); // [1, 2, 2, 3, 3, 4] // Set 自动删除重复项 const set = new Set([1, 2, 2, 3, 3, 4]); console.log([...set]); // [1, 2, 3, 4] // 使用 Set 从数组中删除重复项 const uniqueArray = [...new Set(arr)]; console.log(uniqueArray); // [1, 2, 3, 4]
-
Performances de vérification des éléments
Set
fournit des temps de recherche plus rapides pour vérifier si un élément existe.
const largeArray = Array.from({ length: 1000000 }, (_, i) => i); const largeSet = new Set(largeArray); // 数组查找 console.time('Array includes'); console.log(largeArray.includes(999999)); console.timeEnd('Array includes'); // Set 查找 console.time('Set has'); console.log(largeSet.has(999999)); console.timeEnd('Set has'); // Set 明显更快,因为它内部使用哈希表
-
Méthodes et opérations disponibles
Array
fournit des méthodes plus intégrées pour la manipulation des données, tandis que Set
se concentre sur la gestion de l'unicité.
// 数组方法 const arr = [1, 2, 3, 4, 5]; arr.push(6); // 添加到末尾 arr.pop(); // 从末尾移除 arr.unshift(0); // 添加到开头 arr.shift(); // 从开头移除 arr.splice(2, 1, 'new'); // 替换元素 arr.slice(1, 3); // 提取部分 arr.map(x => x * 2); // 转换元素 arr.filter(x => x > 2); // 过滤元素 arr.reduce((a, b) => a + b); // 归约为单个值 // Set 方法 const set = new Set([1, 2, 3, 4, 5]); set.add(6); // 添加值 set.delete(6); // 删除值 set.has(5); // 检查是否存在 set.clear(); // 删除所有值
-
Accès séquentiel et indexé
Array
gère l'ordre d'insertion et fournit un accès basé sur l'index, tandis que Set
ne gère que l'ordre d'insertion.
// 数组索引访问 const arr = ['a', 'b', 'c']; console.log(arr[0]); // 'a' console.log(arr[1]); // 'b' arr[1] = 'x'; // 直接修改 // Set 没有索引访问 const set = new Set(['a', 'b', 'c']); console.log([...set][0]); // 需要先转换为数组 // 不允许直接修改索引
-
Utilisation de la mémoire
Set
utilise généralement plus de mémoire que Array
mais permet des recherches plus rapides.
// 内存比较(粗略示例) const numbers = Array.from({ length: 1000 }, (_, i) => i); // 数组内存 const arr = [...numbers]; console.log(process.memoryUsage().heapUsed); // Set 内存 const set = new Set(numbers); console.log(process.memoryUsage().heapUsed); // 由于哈希表结构,Set 通常使用更多内存
-
Cas d'utilisation courants
Quand utiliser les tableaux :
// 1. 当顺序和索引访问很重要时 const playlist = ['song1.mp3', 'song2.mp3', 'song3.mp3']; const currentTrack = playlist[currentIndex]; // 2. 当您需要数组方法时 const numbers = [1, 2, 3, 4, 5]; const doubled = numbers.map(x => x * 2); const sum = numbers.reduce((a, b) => a + b, 0); // 3. 当重复值可以接受或需要时 const votes = ['yes', 'no', 'yes', 'yes', 'no']; const yesVotes = votes.filter(vote => vote === 'yes').length;
Quand utiliser Set :
// 1. 当跟踪唯一值时 const uniqueVisitors = new Set(); function logVisitor(userId) { uniqueVisitors.add(userId); console.log(`Total unique visitors: ${uniqueVisitors.size}`); } // 2. 用于快速查找操作 const allowedUsers = new Set(['user1', 'user2', 'user3']); function checkAccess(userId) { return allowedUsers.has(userId); } // 3. 用于删除重复项 function getUniqueHashtags(posts) { const uniqueTags = new Set(); posts.forEach(post => { post.hashtags.forEach(tag => uniqueTags.add(tag)); }); return [...uniqueTags]; }
Convertir entre Set et Array
Vous pouvez facilement basculer entre Set
et Array
selon vos besoins.
// 数组到 Set const arr = [1, 2, 2, 3, 3, 4]; const set = new Set(arr); // Set 到数组 - 三种方法 const back1 = [...set]; const back2 = Array.from(set); const back3 = Array.from(set.values()); // 用于数组去重 const deduped = [...new Set(arr)];
Conclusion
Choisissez Array
quand vous en avez besoin :
- Accès basé sur un index
- Méthodes de tableaux étendues (cartographie, réduction, filtre, etc.)
- Valeur en double
- Efficacité de la mémoire
- Mode itération traditionnel
Choisissez Set
quand vous en avez besoin :
- Valeurs uniques uniquement
- Opération de recherche rapide
- Opération simple d'ajout/suppression
- Gardez une liste d'articles uniques
- Supprimez rapidement les doublons
N'oubliez pas que vous pouvez basculer entre les deux types à tout moment, alors choisissez celui qui correspond le mieux à vos besoins actuels.
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds











Différents moteurs JavaScript ont des effets différents lors de l'analyse et de l'exécution du code JavaScript, car les principes d'implémentation et les stratégies d'optimisation de chaque moteur diffèrent. 1. Analyse lexicale: convertir le code source en unité lexicale. 2. Analyse de la grammaire: générer un arbre de syntaxe abstrait. 3. Optimisation et compilation: générer du code machine via le compilateur JIT. 4. Exécuter: Exécutez le code machine. Le moteur V8 optimise grâce à une compilation instantanée et à une classe cachée, SpiderMonkey utilise un système d'inférence de type, résultant en différentes performances de performances sur le même code.

Python convient plus aux débutants, avec une courbe d'apprentissage en douceur et une syntaxe concise; JavaScript convient au développement frontal, avec une courbe d'apprentissage abrupte et une syntaxe flexible. 1. La syntaxe Python est intuitive et adaptée à la science des données et au développement back-end. 2. JavaScript est flexible et largement utilisé dans la programmation frontale et côté serveur.

Le passage de C / C à JavaScript nécessite de s'adapter à la frappe dynamique, à la collecte des ordures et à la programmation asynchrone. 1) C / C est un langage dactylographié statiquement qui nécessite une gestion manuelle de la mémoire, tandis que JavaScript est dynamiquement typé et que la collecte des déchets est automatiquement traitée. 2) C / C doit être compilé en code machine, tandis que JavaScript est une langue interprétée. 3) JavaScript introduit des concepts tels que les fermetures, les chaînes de prototypes et la promesse, ce qui améliore la flexibilité et les capacités de programmation asynchrones.

Les principales utilisations de JavaScript dans le développement Web incluent l'interaction client, la vérification du formulaire et la communication asynchrone. 1) Mise à jour du contenu dynamique et interaction utilisateur via les opérations DOM; 2) La vérification du client est effectuée avant que l'utilisateur ne soumette les données pour améliorer l'expérience utilisateur; 3) La communication de rafraîchissement avec le serveur est réalisée via la technologie AJAX.

L'application de JavaScript dans le monde réel comprend un développement frontal et back-end. 1) Afficher les applications frontales en créant une application de liste TODO, impliquant les opérations DOM et le traitement des événements. 2) Construisez RestulAPI via Node.js et Express pour démontrer les applications back-end.

Comprendre le fonctionnement du moteur JavaScript en interne est important pour les développeurs car il aide à écrire du code plus efficace et à comprendre les goulots d'étranglement des performances et les stratégies d'optimisation. 1) Le flux de travail du moteur comprend trois étapes: analyse, compilation et exécution; 2) Pendant le processus d'exécution, le moteur effectuera une optimisation dynamique, comme le cache en ligne et les classes cachées; 3) Les meilleures pratiques comprennent l'évitement des variables globales, l'optimisation des boucles, l'utilisation de const et de locations et d'éviter une utilisation excessive des fermetures.

Python et JavaScript ont leurs propres avantages et inconvénients en termes de communauté, de bibliothèques et de ressources. 1) La communauté Python est amicale et adaptée aux débutants, mais les ressources de développement frontal ne sont pas aussi riches que JavaScript. 2) Python est puissant dans les bibliothèques de science des données et d'apprentissage automatique, tandis que JavaScript est meilleur dans les bibliothèques et les cadres de développement frontaux. 3) Les deux ont des ressources d'apprentissage riches, mais Python convient pour commencer par des documents officiels, tandis que JavaScript est meilleur avec MDNWEBDOCS. Le choix doit être basé sur les besoins du projet et les intérêts personnels.

Les choix de Python et JavaScript dans les environnements de développement sont importants. 1) L'environnement de développement de Python comprend Pycharm, Jupyternotebook et Anaconda, qui conviennent à la science des données et au prototypage rapide. 2) L'environnement de développement de JavaScript comprend Node.js, VScode et WebPack, qui conviennent au développement frontal et back-end. Le choix des bons outils en fonction des besoins du projet peut améliorer l'efficacité du développement et le taux de réussite du projet.
