添加一些香料以提高性能。波纹管检查
https://github.com/googleapis/google-api-nodejs-client/issues/375
对于V8隐藏类模式,使用delete运算符会对性能产生负面影响。通常,建议不要使用它。
另外,要删除对象自己的可枚举属性,我们可以创建一个没有这些属性的新对象副本(例如使用lodash的示例):
_.omit(o,'prop','prop2')
甚至将属性值定义为null或未定义(序列化为JSON时将隐式忽略):
o.prop =未定义
您也可以使用破坏方式
const {remov1, remov2, ...new} = old;
old = new;
还有一个更实际的例子:
this._volumes[this._minCandle] = undefined;
{
const {[this._minCandle]: remove, ...rest} = this._volumes;
this._volumes = rest;
}
如您所见,可以将[somePropsVarForDynamicName]: scopeVarName
语法用于动态名称。您可以将所有内容放在方括号(新块)中,以便将其余部分收集在此之后。
这里是一个测试:
执行:
或者我们可以使用一些功能,例如
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');
// or
a = deleteProps(a, ['propB', 'propO']);
这样,将创建一个新对象。并且保留了对象的快速属性。哪个可能重要或重要。如果映射和对象将被多次访问。
关联undefined
也是一个不错的选择。当您负担得起时。对于键,您也可以检查该值。例如,要获取所有活动键,您可以执行以下操作:
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.
未定义虽然不适用于大列表。否则随着时间的发展,会有很多道具加入。由于内存使用量将持续增长,并且永远不会被清除。因此,这取决于用法。仅仅创建一个新对象似乎是个好方法。
然后 Premature optimization is the root of all evil
将开始。因此,您需要意识到这一折衷。以及需要什么,不需要什么。
关于lodash的_.omit()注意
它已从版本5中删除。您无法在存储库中找到它。这里是一个谈论它的问题。
https://github.com/lodash/lodash/issues/2930
v8
您可以检查一下,这是一个很好的阅读https://v8.dev/blog/fast-properties