const noNullObj = useMemo<ISeoList>(() => { if (!seoInfo || typeof seoInfo !== "object") return {} as ISeoList const tObj = cloneDeep(seoInfo) Object.keys(tObj).forEach((key) => { if (!tObj[key]?.length) delete tObj[key] }) return tObj }, [JSON.stringify(seoInfo)]) 优化一下这段代码
时间: 2023-03-24 19:02:25 浏览: 100
这段代码的作用是对一个对象进行处理,去除其中值为空字符串的属性,然后返回处理后的对象。为了优化这段代码,可以考虑以下几点:
1. 使用可选链操作符(?.)来避免访问不存在的属性时出现的错误。
2. 使用 Object.entries() 方法来遍历对象的属性和值,这样可以避免使用 Object.keys() 和 tObj[key] 的重复访问。
3. 将 cloneDeep() 方法的调用放到 useMemo() 外面,这样可以避免每次渲染都进行深拷贝。
优化后的代码如下:
const noNullObj = useMemo<ISeoList>(() => {
if (!seoInfo || typeof seoInfo !== "object") return {} as ISeoList;
const tObj = { ...seoInfo };
Object.entries(tObj).forEach(([key, value]) => {
if (!value?.length) delete tObj[key];
});
return tObj;
}, [JSON.stringify(seoInfo)]);
相关问题
const noNullObj = useMemo<ISeoList>(() => { if (!seoInfo || typeof seoInfo !== "object") return {} as ISeoList const tObj = cloneDeep(seoInfo) Object.keys(tObj).forEach((key) => { if (!tObj[key]?.length) delete tObj[key] }) return tObj }, [JSON.stringify(seoInfo)])
这是一个关于 React Hooks 中 useMemo 的问题,我可以回答。 useMemo 是一个用于优化 React 组件性能的 Hook,它可以缓存计算结果,避免重复计算。在这个例子中,useMemo 用于缓存一个经过处理的 seoInfo 对象,如果 seoInfo 为空或不是对象,则返回一个空对象。如果 seoInfo 对象中某个属性的值为空,则删除该属性。最后返回处理后的对象。这个处理过程只有在 seoInfo 发生变化时才会执行,可以提高组件性能。
deepClone(obj, cache = [], objkey = '') { function find(list, f) { return list.filter(f)[0] } // 如果是简单数据类型,直接返回 if (obj === null || typeof obj !== 'object' || objkey === 'children') { return obj } const hit = find(cache, (c) => c.original === obj) // 如果有循环引用,直接返回 if (hit) { return hit.copy } const copy = Array.isArray(obj) ? [] : {} // 先把 copy 放到cache缓存中,我们想在递归的时候引用它 cache.push({ original: obj, copy }) Object.keys(obj).forEach((key) => { copy[key] = this.deepClone(obj[key], cache, key) }) return copy }翻译这段代码
这是一个 JavaScript 函数,它接受一个对象和两个可选参数(缓存和对象键)作为参数。该函数的目的是将传入的对象进行深拷贝,并返回拷贝后的对象。
如果传入的对象是 null、简单数据类型或者该对象的键为 "children",则直接返回该对象本身。
如果传入的对象存在循环引用,则返回缓存中的拷贝版本。
创建一个拷贝版本的对象,如果传入的对象是一个数组,则创建一个空数组,否则创建一个空对象。然后将该拷贝对象存储到缓存中,以便递归引用。
遍历传入对象的所有属性,使用递归调用进行深拷贝,并将生成的拷贝值存储到拷贝对象中。最后返回拷贝对象。
阅读全文