JavaScript não fornece um objeto Set integrado, mas os desenvolvedores geralmente precisam da capacidade de armazenar valores exclusivos e não ordenados com pesquisa rápida, recursos de adição e exclusão.
Usando um objeto com valores booleanos:
Como sugerido na pergunta, um objeto pode ser usado para imitar um conjunto. As chaves representam os valores e todos os valores são definidos como verdadeiros (ou qualquer valor não nulo). Essa abordagem fornece pesquisa e exclusão rápidas, mas a adição se torna mais lenta à medida que o número de chaves aumenta.
ES6 Set Object:
Se o seu ambiente suportar ES6 (por exemplo, navegadores modernos ou transpilados código), você pode usar o objeto Set integrado. Possui excelente desempenho para todas as operações definidas e, além disso, permite fácil iteração sobre elementos e evita a coerção de strings.
Polyfills e objetos pré-construídos:
Para ambientes que não suportam ES6, você pode usar polyfills como "ES6-Set" ou objetos pré-construídos como "miniSet" ou "set.js" que fornecem funcionalidade semelhante ao objeto ES6 Set. Eles oferecem vantagens como compatibilidade com navegadores mais antigos ou menor pegada de código.
Detalhes de implementação:
Usando um objeto:
const setObj = {};
setObj["item1"] = true;
if ("item1" in setObj) { // fast lookup
console.log("Item found");
}
delete setObj["item1"]; // fast deletion
Usando o ES6 Set Object:
const set = new Set();
set.add("item1");
if (set.has("item1")) { // fast lookup
console.log("Item found");
}
set.delete("item1"); // fast deletion
Usando um Polyfill:
import Set from "es6-set";
const set = new Set(["item1", "item2"]);
console.log(...set.keys()); // easy iteration
Usando um objeto pré-construído:
const miniSet = new MiniSet("item1", "item2");
if (miniSet.has("item1")) { // fast lookup
console.log("Item found");
}
miniSet.remove("item1"); // fast deletion
A melhor escolha depende dos requisitos específicos e do suporte disponível em seu ambiente. Para aplicativos complexos ou de desempenho crítico, o objeto ES6 Set é ideal. Caso contrário, usar um objeto, polyfill ou objeto de conjunto pré-construído pode fornecer uma solução razoável.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3