Um etwas Würze hinzuzufügen, die Leistung bringt. Überprüfen Sie diesen Faden unten
https://github.com/googleapis/google-api-nodejs-client/issues/375
Die Verwendung des Löschoperators hat leistungsnegative Auswirkungen auf das Muster der versteckten V8-Klassen. Im Allgemeinen wird empfohlen, es nicht zu verwenden.
Alternativ können wir zum Entfernen objektaufzählbarer Eigenschaften eine neue Objektkopie ohne diese Eigenschaften erstellen (Beispiel mit lodash):
_.omit (o, 'prop', 'prop2')
Oder definieren Sie den Eigenschaftswert auf null oder undefiniert (was bei der Serialisierung in JSON implizit ignoriert wird):
o.prop = undefiniert
Sie können auch den zerstörerischen Weg verwenden
const {remov1, remov2, ...new} = old;
old = new;
Und ein praktischeres Beispiel:
this._volumes[this._minCandle] = undefined;
{
const {[this._minCandle]: remove, ...rest} = this._volumes;
this._volumes = rest;
}
Wie Sie sehen, können Sie die [somePropsVarForDynamicName]: scopeVarName
Syntax für dynamische Namen verwenden. Und Sie können alles in Klammern setzen (neuer Block), so dass der Rest Müll ist, der danach gesammelt wird.
Hier ein Test:
exec:
Oder wir können mit einer Funktion wie gehen
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;
}, {});
}
für Typoskript
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;
}, {});
}
Verwendung:
let a = {propH: 'hi', propB: 'bye', propO: 'ok'};
a = deleteProps(a, 'propB');
// or
a = deleteProps(a, ['propB', 'propO']);
Auf diese Weise wird ein neues Objekt erstellt. Und die schnelle Eigenschaft des Objekts bleibt erhalten. Welches kann wichtig oder wichtig sein. Wenn auf das Mapping und das Objekt viele Male zugegriffen wird.
Auch das Assoziieren undefined
kann ein guter Weg sein. Wenn Sie es sich leisten können. Und für die Schlüssel können Sie auch den Wert überprüfen. Um beispielsweise alle aktiven Schlüssel zu erhalten, gehen Sie wie folgt vor:
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.
Undefiniert ist jedoch nicht für große Listen geeignet. Oder Entwicklung im Laufe der Zeit mit vielen Requisiten. Da die Speichernutzung weiter zunimmt und niemals bereinigt wird. Es kommt also auf die Nutzung an. Und nur ein neues Objekt zu erstellen, scheint der gute Weg zu sein.
Dann setzt der Premature optimization is the root of all evil
Wille ein. Sie müssen sich also des Kompromisses bewusst sein. Und was benötigt wird und was nicht.
Anmerkung zu _.omit () von lodash
Es wurde aus Version 5 entfernt. Sie können es nicht im Repo finden. Und hier ein Thema, das darüber spricht.
https://github.com/lodash/lodash/issues/2930
v8
Sie können dies überprüfen, was eine gute Lektüre ist: https://v8.dev/blog/fast-properties