Prefacio
Intención original : Recientemente estaba leyendo el libro "Comprensión profunda de Es6" . Antes no había aprendido completamente la gramática de Es6. También aproveché la etapa ocupada para volver a estudiar y ordenar las notas para compartir con todos. Si no le gusta, no lo rocíe.
Adecuado para la multitud : desarrollo primario de front-end, desvío de grandes.
Estructura del contenido : Concepto -> Gramática básica -> Escenario de aplicación
Antes de Es6, los arreglos siempre han sido el JavaScript
único tipo de colección, pero algunos desarrolladores piensan que los objetos que no son arreglos también son colecciones, pero solo pares clave-valor. Pero antes de Es6, los desarrolladores solo pueden usar colecciones de arreglos, pero los arreglos están indexados por subíndices index
, por lo que a menudo se usan para crear colas y pilas. Si los desarrolladores quieren usar colecciones indexadas sin arreglos, usarán literales de objeto. La estructura requerida para medir la escena.
Qué es Set
Set es una colección sin elementos duplicados, pero no utiliza valores de índice para acceder a valores de matriz como matrices. La práctica habitual es detectar si existe un valor en esta colección.
¿Por qué está configurado?
Echemos un vistazo a dos casos para explicar por quéSet
Caso numero uno
let o = {
}
let key1 = {
}
let key2 = {
}
o[key1] = "val"
console.log(o[key1]) // val
console.log(o[key2]) // val
En el ejemplo anterior, la clave se convertirá en un objeto de cadena [object Object]
, invoca un interno toString
, por lo que independientemente key1
o key2
devolverá el mismo val
valor.
Caso dos
let o = {
}
o.count = 1;
if (o.count) {
console.log(o.count)
}
En el ejemplo anterior, hay dos problemas, ya sea para juzgar si existe este atributo o si el valor de detección es distinto de cero. Si el valor del objeto es realmente igual a 0, entonces este juicio no se ejecutará. Si este problema ocurre en un gran proyecto No es fácil de encontrar. (Algunos amigos pueden pensar que si el objeto de prueba tiene este atributo, quien lo escribe así, puede usar el in
operador o getOwnProperty
) ¡Espero que no me use aquí! , Aunque se puede usar, pero comprenda que este artículo está hablando deSet
Entonces, digamos Set
que un Set
conjunto es una lista ordenada, no habrá valores duplicados, la única excepción es Set
que la +0
suma -0
es igual. Set
In tampoco convertirá el valor almacenado, como la {}
conversión directa anterior a [object Object]
in Set
no existirá en esta situación, por supuesto, incluidos los tipos numéricos y los tipos de cadena 24
y "24"
no habrá conflicto entre los dos.
let o = new Set()
let key1 = {
}
let key2 = {
}
o.add(key1)
o.add(key2)
console.log(o.size) // 2
En el ejemplo anterior, se puede ver que agregamos dos objetos {}
, size
hay dos datos que no están cubiertos. Conozcamos su sintaxis a continuación.
Gramática básica
Set
Es un constructor, sus parámetros reciben todos los objetos iteradores (Iterator), las matrices, cadenas, colecciones de conjuntos, etc.son todos iterables.
Agregar elemento
Llame para new Set()
crear una Set
colección y use el add
método para agregar objetos a la colección.
let o = new Set()
o.add(24)
o.add("24")
console.log(o.size) // 查看集合的元素数量 2
En el ejemplo anterior, puede ver claramente Set
que el valor de la clave no se convierte en una cadena de la colección y que los diferentes tipos y punteros son independientes entre sí.
Arriba también dijimos que el Set
valor no se repetirá en la colección
let o = new Set()
o.add(24)
o.add(24) // 这一行代码则会忽略,
let arr = new Set([1,1,2,3,4,5,1])
En el ejemplo anterior, la segunda vez es igual que el primer valor y el tipo es el mismo, por lo que Set
el código se ignorará y no se agregará a la colección. Mire la arr
declaración de variable a continuación que inicializa directamente algunos valores de matriz, y los valores repetidos en estos se filtrarán directamente, y solo habrá uno cuando se genere.
Elemento de detección
Llame al has
método para detectar si hay un determinado valor en la colección, y el valor de retorno es el Boolean
valor. La colección no puede obtener el valor de índice como una matriz, y Set
no hay ningún index
valor de índice en la colección .
let o = new Set()
o.add("蛙人")
console.log(o.has("蛙人")) // true
Quitar elemento
Llamar al delete
método puede eliminar Set
un elemento de la colección y se devuelve el valor de retorno Boolean
, o puede llamar al clear
método para eliminar todos los elementos de la colección y el clear
método no tiene valor de retorno.
Eliminación única
let o = new Set()
o.add("蛙人")
o.delete("蛙人") // true
console.log(o.size) 0
Eliminar todo
let o = new Set()
o.add("蛙人")
o.clear()
console.log(o.size) 0
Establecer usos de colección para que cada uno atraviese
Set
El recorrido forEach aquí es exactamente el mismo que el recorrido forEach de la matriz, excepto que los valores de retorno del parámetro son algo diferentes. El Set
método forEach también recibe tres parámetros.
- Posición de índice en la colección de conjuntos
- El mismo valor que el primer parámetro
- Establecer la colección en sí
let o = new Set(["蛙人", 24, "male"])
o.forEach((value, key, self) => {
console.log(value, key, self)
// 蛙人 蛙人 set对象
// 24 24 set对象
// male male set对象
})
En el ejemplo anterior, solo el primer parámetro de forEach es el mismo que el segundo parámetro. La razón es que Set
no hay un valor de índice en el objeto, por lo que su parámetro de valor de índice también es un valor. El funcionario de Es6 puede eliminar este parámetro, pero Considere Miedo a que los desarrolladores malinterpreten que es diferente del tradicional forEach, por lo que los parámetros están unificados.
Escenarios de aplicación
Desduplicación
let list = [1,3,1,2,3,5]
let o = new Set(list);
console.log(o) // 1 3 2 5
let newList = [...o] // 将遍历对象集合转换为真数组
En el ejemplo anterior, usamos este método en la mayoría de los escenarios para deduplicar y luego convertirlo en una matriz verdadera después de la deduplicación.
agradecer
Gracias por abrir este artículo durante su apretada agenda. Espero que le sea útil. Si tiene alguna pregunta, puede corregirme.
Si crees que está bien, simplemente hazlo.
Los socios interesados pueden unirse al pequeño grupo de intercambio de entretenimiento de front-end y dar la bienvenida a todos juntos para discutir el intercambio.