Para adicionar algum tempero trazendo desempenho. Verifique este tópico abaixo
https://github.com/googleapis/google-api-nodejs-client/issues/375
O uso do operador delete tem efeitos negativos de desempenho para o padrão de classes ocultas V8. Em geral, é recomendável não usá-lo.
Como alternativa, para remover as propriedades enumeráveis do próprio objeto, poderíamos criar uma nova cópia do objeto sem essas propriedades (exemplo usando lodash):
_.omit (o, 'prop', 'prop2')
Ou até mesmo defina o valor da propriedade como nulo ou indefinido (que é implicitamente ignorado ao serializar para JSON):
o.prop = indefinido
Você também pode usar a forma destrutiva
const {remov1, remov2, ...new} = old;
old = new;
E um exemplo mais prático:
this._volumes[this._minCandle] = undefined;
{
const {[this._minCandle]: remove, ...rest} = this._volumes;
this._volumes = rest;
}
Como você pode ver, você pode usar a [somePropsVarForDynamicName]: scopeVarName
sintaxe para nomes dinâmicos. E você pode colocar tudo entre colchetes (novo bloco) para que o resto seja coletado como lixo depois disso.
Aqui está um teste:
exec:
Ou podemos ir com alguma função como
function deleteProps(obj, props) {
if (!Array.isArray(props)) props = [props];
return Object.keys(obj).reduce((newObj, prop) => {
if (!props.includes(prop)) {
newObj[prop] = obj[prop];
}
return newObj;
}, {});
}
para texto datilografado
function deleteProps(obj: Object, props: string[]) {
if (!Array.isArray(props)) props = [props];
return Object.keys(obj).reduce((newObj, prop) => {
if (!props.includes(prop)) {
newObj[prop] = obj[prop];
}
return newObj;
}, {});
}
Uso:
let a = {propH: 'hi', propB: 'bye', propO: 'ok'};
a = deleteProps(a, 'propB');
// or
a = deleteProps(a, ['propB', 'propO']);
Desta forma, um novo objeto é criado. E a propriedade rápida do objeto é mantida. O que pode ser importante ou importante. Se o mapeamento e o objeto serão acessados muitas vezes.
Associar-se também undefined
pode ser uma boa maneira de prosseguir. Quando você puder pagar. E para as chaves, você também pode verificar o valor. Por exemplo, para obter todas as chaves ativas, você faz algo como:
const allActiveKeys = Object.keys(myObj).filter(k => myObj[k] !== undefined);
//or
const allActiveKeys = Object.keys(myObj).filter(k => myObj[k]); // if any false evaluated value is to be stripped.
Undefined não é adequado para uma lista grande. Ou desenvolvimento ao longo do tempo com muitos adereços surgindo. Como o uso de memória continuará crescendo e nunca será limpo. Portanto, depende do uso. E apenas criar um novo objeto parece ser o bom caminho.
Em seguida, o Premature optimization is the root of all evil
será ativado. Portanto, você precisa estar ciente da troca. E o que é necessário e o que não é.
Nota sobre _.omit () de lodash
Ele foi removido da versão 5. Você não pode encontrá-lo no repo. E aqui está uma questão que falamos sobre isso.
https://github.com/lodash/lodash/issues/2930
v8
Você pode verificar isso, o que é uma boa leitura https://v8.dev/blog/fast-properties