Чтобы добавить пикантности в Performance. Проверьте эту резьбу ниже
https://github.com/googleapis/google-api-nodejs-client/issues/375
Использование оператора удаления отрицательно сказывается на производительности для шаблона скрытых классов V8. В общем, не рекомендуется его использовать.
В качестве альтернативы, чтобы удалить собственные перечислимые свойства объекта, мы могли бы создать новую копию объекта без этих свойств (пример с использованием lodash):
_.omit (o, 'prop', 'prop2')
Или даже укажите для значения свойства значение null или undefined (которое неявно игнорируется при сериализации в JSON):
o.prop = undefined
Вы также можете использовать разрушающий способ
const {remov1, remov2, ...new} = old;
old = new;
И более практичный пример:
this._volumes[this._minCandle] = undefined;
{
const {[this._minCandle]: remove, ...rest} = this._volumes;
this._volumes = rest;
}
Как видите, вы можете использовать [somePropsVarForDynamicName]: scopeVarName
синтаксис для динамических имен. И вы можете заключить все в скобки (новый блок), чтобы все остальное было собрано после него.
Вот тест:
exec:
Или мы можем использовать какую-нибудь функцию вроде
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;
}, {});
}
для машинописного текста
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;
}, {});
}
Применение:
let a = {propH: 'hi', propB: 'bye', propO: 'ok'};
a = deleteProps(a, 'propB');
a = deleteProps(a, ['propB', 'propO']);
Таким образом создается новый объект. И быстродействие объекта сохраняется. Что может быть важным или иметь значение. Если отображение и объект будут доступны много-много раз.
Также undefined
хорошим способом может быть общение . Когда вы можете себе это позволить. И для ключей вы тоже можете проверить значение. Например, чтобы получить все активные ключи, вы делаете что-то вроде:
const allActiveKeys = Object.keys(myObj).filter(k => myObj[k] !== undefined);
const allActiveKeys = Object.keys(myObj).filter(k => myObj[k]);
Неопределенный не подходит для большого списка. Или разработка в течение долгого времени с множеством возможностей. Поскольку использование памяти будет продолжать расти и никогда не будет очищено. Так что это зависит от использования. И просто создание нового объекта кажется хорошим способом.
Тогда Premature optimization is the root of all evil
вступит в силу. Итак, вам нужно знать о компромиссе. А что нужно, а что нет.
Замечание о _.omit () от lodash
Он удален из версии 5. Вы не можете найти его в репо. И вот вопрос, что об этом поговорим.
https://github.com/lodash/lodash/issues/2930
v8
Вы можете проверить это, и это полезно для чтения https://v8.dev/blog/fast-properties