MSDN hace referencia a la abstracción de la colección Set de JavaScript. Tengo una serie de objetos que me gustaría convertir en un conjunto para poder eliminar ( .delete() ) varios elementos por nombre:
var array = [ {name: "malcom", dogType: "four-legged"}, {name: "peabody", dogType: "three-legged"}, {name: "pablo", dogType: "two-legged"} ];¿Cómo convierto esta matriz en un conjunto? Más específicamente, ¿es posible hacer esto sin iterar sobre la matriz anterior? La documentación es relativamente escasa (suficiente para conjuntos instanciados; no para conversiones, si es posible).
También puedo estar pensando en la conversión a un Mapa , para su eliminación por clave. Lo que estoy tratando de lograr es una colección iterable a la que se puede acceder o modificar accediendo a los elementos principalmente a través de una clave (a diferencia del índice).
La conversión de una matriz a otra es el objetivo final.
Simplemente pase la matriz al constructor Set. El constructor Set acepta un parámetro iterable . El objeto Array implementa el protocolo iterable , por lo que es un parámetro válido.
var arr = [55, 44, 65]; var set = new Set(arr); console.log(set.size === arr.length); console.log(set.has(65));Si empiezas con:
let array = [ {name: "malcom", dogType: "four-legged"}, {name: "peabody", dogType: "three-legged"}, {name: "pablo", dogType: "two-legged"} ];Y quieres un conjunto de, digamos, nombres, harías:
let namesSet = new Set(array.map(item => item.name));Por definición, "Un conjunto es una colección de valores, donde cada valor puede ocurrir solo una vez". Entonces, si su matriz tiene valores repetidos, solo se agregará un valor entre los valores repetidos a su Conjunto.
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}Por lo tanto, no convierta a conjunto si tiene valores repetidos en su matriz.