Aby dodać pikanterii wprowadzając Performance. Sprawdź ten wątek poniżej
https://github.com/googleapis/google-api-nodejs-client/issues/375
Użycie operatora delete ma negatywny wpływ na wydajność wzorca klas ukrytych w wersji 8. Ogólnie zaleca się, aby go nie używać.
Alternatywnie, aby usunąć własne wyliczalne właściwości obiektu, moglibyśmy utworzyć nową kopię obiektu bez tych właściwości (na przykład przy użyciu lodash):
_.omit (o, 'prop', 'prop2')
Lub nawet zdefiniuj wartość właściwości na null lub undefined (która jest niejawnie ignorowana podczas serializacji do JSON):
o.prop = undefined
Możesz też użyć niszczycielskiego sposobu
const {remov1, remov2, ...new} = old;
old = new;
I bardziej praktyczny przykład:
this._volumes[this._minCandle] = undefined;
{
const {[this._minCandle]: remove, ...rest} = this._volumes;
this._volumes = rest;
}
Jak widać, możesz użyć [somePropsVarForDynamicName]: scopeVarName
w nazwach dynamicznych składni. I możesz umieścić wszystko w nawiasach (nowy blok), aby reszta została po nim zebrana.
Tutaj test:
exec:
Lub możemy skorzystać z jakiejś funkcji, takiej jak
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;
}, {});
}
dla maszynopisu
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;
}, {});
}
Stosowanie:
let a = {propH: 'hi', propB: 'bye', propO: 'ok'};
a = deleteProps(a, 'propB');
a = deleteProps(a, ['propB', 'propO']);
W ten sposób powstaje nowy obiekt. I zachowana jest szybka właściwość obiektu. Co może być ważne lub ważne. Jeśli mapowanie i obiekt będą dostępne wiele razy.
Kojarzenie się undefined
może być również dobrym sposobem. Kiedy możesz sobie na to pozwolić. W przypadku kluczy możesz też sprawdzić wartość. Na przykład, aby uzyskać wszystkie aktywne klucze, wykonaj coś takiego:
const allActiveKeys = Object.keys(myObj).filter(k => myObj[k] !== undefined);
const allActiveKeys = Object.keys(myObj).filter(k => myObj[k]);
Niezdefiniowany nie nadaje się jednak na dużą listę. Lub rozwój w czasie z wieloma rekwizytami, które pojawią się. Ponieważ użycie pamięci będzie rosło i nigdy nie zostanie wyczyszczone. Więc to zależy od użycia. A samo stworzenie nowego obiektu wydaje się być dobrym sposobem.
Wtedy Premature optimization is the root of all evil
zadziała. Musisz więc być świadomy tego kompromisu. A co jest potrzebne, a co nie.
Uwaga dotycząca _.omit () z lodash
Został usunięty z wersji 5. Nie możesz go znaleźć w repozytorium. I tutaj kwestia, która o tym mówi.
https://github.com/lodash/lodash/issues/2930
v8
Możesz to sprawdzić, co jest dobrym lekturą https://v8.dev/blog/fast-properties