Pour ajouter du piquant apportant de la performance. Vérifiez ce fil ci-dessous
https://github.com/googleapis/google-api-nodejs-client/issues/375
L'utilisation de l'opérateur de suppression a des effets négatifs sur les performances du modèle de classes cachées V8. En général, il est recommandé de ne pas l'utiliser.
Alternativement, pour supprimer les propriétés énumérables propres à l'objet, nous pourrions créer une nouvelle copie d'objet sans ces propriétés (exemple en utilisant lodash):
_.omit (o, 'prop', 'prop2')
Ou même définissez la valeur de la propriété sur null ou undefined (ce qui est implicitement ignoré lors de la sérialisation vers JSON):
o.prop = indéfini
Vous pouvez aussi utiliser la méthode destructrice
const {remov1, remov2, ...new} = old;
old = new;
Et un exemple plus pratique:
this._volumes[this._minCandle] = undefined;
{
const {[this._minCandle]: remove, ...rest} = this._volumes;
this._volumes = rest;
}
Comme vous pouvez le voir, vous pouvez utiliser la [somePropsVarForDynamicName]: scopeVarName
syntaxe pour les noms dynamiques. Et vous pouvez tout mettre entre crochets (nouveau bloc) pour que le reste soit récupéré après.
Voici un test:
exec:
Ou nous pouvons aller avec une fonction comme
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;
}, {});
}
pour dactylographié
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;
}, {});
}
Usage:
let a = {propH: 'hi', propB: 'bye', propO: 'ok'};
a = deleteProps(a, 'propB');
// or
a = deleteProps(a, ['propB', 'propO']);
De cette façon, un nouvel objet est créé. Et la propriété rapide de l'objet est conservée. Ce qui peut être important ou important. Si le mappage et l'objet seront consultés plusieurs fois.
L'association undefined
peut également être une bonne façon de procéder. Quand vous pouvez vous le permettre. Et pour les clés, vous pouvez également vérifier la valeur. Par exemple, pour obtenir toutes les clés actives, vous faites quelque chose comme:
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 ne convient pas pour une grande liste. Ou le développement au fil du temps avec de nombreux accessoires à venir. Comme l'utilisation de la mémoire continuera d'augmenter et ne sera jamais nettoyée. Cela dépend donc de l'utilisation. Et simplement créer un nouvel objet semble être le bon moyen.
Ensuite, la Premature optimization is the root of all evil
volonté entrera en jeu. Vous devez donc être conscient du compromis. Et ce qui est nécessaire et ce qui ne l'est pas.
Remarque sur _.omit () de lodash
Il est supprimé de la version 5. Vous ne pouvez pas le trouver dans le dépôt. Et voici un numéro qui en parle.
https://github.com/lodash/lodash/issues/2930
v8
Vous pouvez vérifier ceci qui est une bonne lecture https://v8.dev/blog/fast-properties