Para agregar un poco de sabor a rendimiento. Compruebe este hilo a continuación
https://github.com/googleapis/google-api-nodejs-client/issues/375
El uso del operador de eliminación tiene efectos negativos en el rendimiento del patrón de clases ocultas de V8. En general se recomienda no utilizarlo.
Alternativamente, para eliminar las propiedades enumerables propias del objeto, podríamos crear una nueva copia del objeto sin esas propiedades (ejemplo usando lodash):
_.omit (o, 'prop', 'prop2')
O incluso defina el valor de la propiedad en nulo o indefinido (que se ignora implícitamente al serializar a JSON):
o.prop = indefinido
También puedes usar la forma destructiva
const {remov1, remov2, ...new} = old;
old = new;
Y un ejemplo más práctico:
this._volumes[this._minCandle] = undefined;
{
const {[this._minCandle]: remove, ...rest} = this._volumes;
this._volumes = rest;
}
Como puede ver, puede usar [somePropsVarForDynamicName]: scopeVarName
sintaxis para nombres dinámicos. Y puede poner todo entre corchetes (nuevo bloque) para que el resto sea basura recolectada después.
Aquí una prueba:
ejecutivo:
O podemos ir con alguna función 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 mecanografiar
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');
a = deleteProps(a, ['propB', 'propO']);
De esta forma se crea un nuevo objeto. Y se mantiene la propiedad rápida del objeto. Lo que puede ser importante o importante. Si se accederá al mapeo y al objeto muchas veces.
También asociarse undefined
puede ser una buena manera de hacerlo. Cuando te lo puedas permitir. Y para las claves, también puede verificar el valor. Por ejemplo, para obtener todas las claves activas, haga algo como:
const allActiveKeys = Object.keys(myObj).filter(k => myObj[k] !== undefined);
const allActiveKeys = Object.keys(myObj).filter(k => myObj[k]);
Undefined no es adecuado para una lista grande. O desarrollo a lo largo del tiempo con muchos accesorios por venir. Como el uso de la memoria seguirá creciendo y nunca se limpiará. Entonces depende del uso. Y simplemente crear un objeto nuevo parece ser la mejor manera.
Entonces se Premature optimization is the root of all evil
activará. Por lo tanto, debe ser consciente de la compensación. Y lo que se necesita y lo que no.
Nota sobre _.omit () de lodash
Se eliminó de la versión 5. No puede encontrarlo en el repositorio. Y aquí un tema del que hablar.
https://github.com/lodash/lodash/issues/2930
v8
Puede comprobar esto, que es una buena lectura https://v8.dev/blog/fast-properties