web-dev-qa-db-fra.com

Tableau JavaScript à définir

MSDN fait référence à l'abstraction de la collection Set de JavaScript. J'ai un tableau d'objets que j'aimerais convertir en ensemble afin de pouvoir supprimer (.delete()) divers éléments par leur nom:

var array = [
    {name: "malcom", dogType: "four-legged"},
    {name: "peabody", dogType: "three-legged"},
    {name: "pablo", dogType: "two-legged"}
];

Comment convertir ce tableau en un ensemble? Plus précisément, est-il possible de le faire sans parcourir le tableau ci-dessus? La documentation est relativement insuffisante (suffisante pour les ensembles instanciés; pas pour les conversions - si possible).

Je pense peut-être aussi à la conversion en un Map , pour une suppression par clé. Ce que j'essaie d'accomplir est une collection itérable qui peut être consultée ou modifiée en accédant aux éléments principalement via une clé (par opposition à index). 

La conversion d'un tableau à l'autre est l'objectif ultime.

68
Thomas

Il suffit de passer le tableau au constructeur Set. Le constructeur Set accepte un paramètre iterable. L'objet Array implémente le protocole iterable, donc c'est un paramètre valide.

var arr = [55, 44, 65];
var set = new Set(arr);
console.log(set.size === arr.length);
console.log(set.has(65));

Vois ici

101
levi

Ce que levia dit à propos de le transmettre au constructeur est correct, mais vous pouvez également utiliser un objet.

Je pense que ce que Veverke essaie de dire, c'est que vous pouvez facilement utiliser le mot clé delete sur un objet pour obtenir le même effet.

Je pense que vous êtes confus par la terminologie; properties sont des composants de l'objet que vous pouvez utiliser comme index nommés (si vous voulez le voir ainsi).

Essayez quelque chose comme ça:

var obj = {
    "bob": "dole",
    "mr.": "peabody",
    "darkwing": "duck"
};

Ensuite, vous pouvez simplement faire ceci:

delete obj["bob"];

La structure de l'objet serait alors la suivante:

{
    "mr.": "peabody",
    "darkwing": "duck"
}

Ce qui a le même effet.

3
AstroCB

Si vous commencez avec:

let array = [
    {name: "malcom", dogType: "four-legged"},
    {name: "peabody", dogType: "three-legged"},
    {name: "pablo", dogType: "two-legged"}
];

Et vous voulez un ensemble de noms, par exemple, que vous feriez:

let namesSet = new Set(array.map(item => item.name));
1
Ryan Shillington

Par définition"Un ensemble est un ensemble de valeurs dans lesquelles chaque valeur ne peut apparaître qu’une fois".Donc, si votre tableau a des valeurs répétées, une seule valeur parmi les valeurs répétées sera ajoutée à votre ensemble.

var arr = [1, 2, 3];
var set = new Set(arr);
console.log(set); // {1,2,3}


var arr = [1, 2, 1];
var set = new Set(arr);
console.log(set); // {1,2}

Donc, ne convertissez pas pour définir si vous avez répété des valeurs dans votre tableau.

0
Ashlesh Sortee