Performans getiren biraz baharat eklemek için. Bu ipliği kontrol edin
https://github.com/googleapis/google-api-nodejs-client/issues/375
Silme operatörünün kullanılması, V8 gizli sınıflar kalıbı için performansı olumsuz etkiler. Genel olarak kullanmamanız tavsiye edilir.
Alternatif olarak, nesnenin kendi numaralandırılabilir özelliklerini kaldırmak için, bu özellikler olmadan yeni bir nesne kopyası oluşturabiliriz (örnek lodash kullanarak):
_.omit (o, 'prop', 'prop2')
Veya özellik değerini null veya undefined olarak tanımlayın (bu, JSON'a serileştirirken örtük olarak yoksayılır):
o.prop = tanımsız
Sen de yok etme yolunu kullanabilirsin
const {remov1, remov2, ...new} = old;
old = new;
Ve daha pratik bir örnek:
this._volumes[this._minCandle] = undefined;
{
const {[this._minCandle]: remove, ...rest} = this._volumes;
this._volumes = rest;
}
Gördüğünüz gibi [somePropsVarForDynamicName]: scopeVarName
, dinamik adlar için sözdizimi kullanabilirsiniz . Ve hepsini parantez içine (yeni blok) koyabilirsiniz, böylece geri kalanı ondan sonra toplanacaktır.
İşte bir test:
exec:
Veya aşağıdaki gibi bir işlevle gidebiliriz
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;
}, {});
}
daktilo için
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;
}, {});
}
Kullanım:
let a = {propH: 'hi', propB: 'bye', propO: 'ok'};
a = deleteProps(a, 'propB');
a = deleteProps(a, ['propB', 'propO']);
Bu şekilde yeni bir nesne yaratılır. Ve nesnenin hızlı özelliği korunur. Hangisi önemli veya önemli olabilir. Haritalama ve nesneye birçok kez erişilecekse.
Ayrıca ilişki undefined
kurmak, birlikte gitmek için iyi bir yol olabilir. Ödeyebileceğin zaman. Ve anahtarlar için de değeri kontrol edebilirsiniz. Örneğin, tüm aktif anahtarları almak için aşağıdaki gibi bir şey yaparsınız:
const allActiveKeys = Object.keys(myObj).filter(k => myObj[k] !== undefined);
const allActiveKeys = Object.keys(myObj).filter(k => myObj[k]);
Tanımsız, büyük liste için uygun değildir. Ya da zaman içinde birçok donanımın geleceği geliştirme. Bellek kullanımı artmaya devam edeceği ve asla temizlenmeyeceği için. Yani kullanıma bağlıdır. Ve sadece yeni bir nesne yaratmak iyi bir yol gibi görünüyor.
Sonra Premature optimization is the root of all evil
irade devreye girer. Dolayısıyla, değiş tokuşun farkında olmanız gerekir. Ve neye ihtiyaç duyulur ve ne olmaz.
Lodash'tan _.omit () hakkında not
Sürüm 5'ten kaldırılmıştır. Depoda bulamazsınız. Ve işte bundan bahseden bir konu.
https://github.com/lodash/lodash/issues/2930
v8
İyi bir okuma olan bunu kontrol edebilirsiniz https://v8.dev/blog/fast-properties