添加一些带来性能的香料。在下面查看此线程
https://github.com/googleapis/google-api-nodejs-client/issues/375
删除操作符的使用对性能有负面影响
V8 隐藏类模式。一般建议不要使用
它。
或者,要删除对象自身的可枚举属性,我们可以
创建一个没有这些属性的新对象副本(例如使用
lodash):
_.omit(o, 'prop', 'prop2')
甚至将属性值定义为 null 或 undefined(即
序列化为 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.
Undefined 不适合大列表。或者随着时间的推移有许多道具进入。因为内存使用量将不断增长并且永远不会被清理。所以这取决于使用情况。只是创建一个新对象似乎是个好方法。
然后Premature optimization is the root of all evil 将启动。所以你需要注意权衡。需要什么,不需要什么。
关于 lodash 中的 _.omit() 的注意事项
它已从版本 5 中删除。您无法在 repo 中找到它。这里有一个谈论它的问题。
https://github.com/lodash/lodash/issues/2930
v8
你可以看看这是一个很好的阅读https://v8.dev/blog/fast-properties