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 10:02:25 浏览: 61
这段代码的作用是对一个对象进行处理,去除其中值为空字符串的属性,然后返回处理后的对象。为了优化这段代码,可以考虑以下几点:
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)]);
相关问题
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",则直接返回该对象本身。
如果传入的对象存在循环引用,则返回缓存中的拷贝版本。
创建一个拷贝版本的对象,如果传入的对象是一个数组,则创建一个空数组,否则创建一个空对象。然后将该拷贝对象存储到缓存中,以便递归引用。
遍历传入对象的所有属性,使用递归调用进行深拷贝,并将生成的拷贝值存储到拷贝对象中。最后返回拷贝对象。
export default { name: "app", created() { if (localStorage.eletoken) { const decode = jwt_decode(localStorage.eletoken) this.$store.dispatch("setIsAutnenticated", !this.isEmpty(decode)) this.$store.dispatch("setUser", decode) } }, methods: { isEmpty(value) { return ( value === undefined || value === null || (typeof value === "object" && Object.keys(value).length === 0) || (typeof value === "string" && value.trim().length === 0) ) } } } </script>
这段代码是一个Vue.js组件的定义,主要向localStorage中存储的eletoken进行解码,判断是否为空,并将解码后的结果存储到Vuex store中。具体分析如下:
1. 组件名称为"app"。
2. 在组件创建时(即created钩子函数中),判断localStorage中是否存储了名为"eletoken"的数据,如果存在,则使用jwt_decode库对其进行解码。
3. 解码后的结果存储到名为"decode"的常量中。
4. 调用Vuex store中的"setIsAutnenticated"和"setUser"方法,分别将解码结果中是否为空的布尔值和解码后的数据对象存储到store中。
5. 定义了一个名为"isEmpty"的方法,用于判断传入的值是否为空。如果为空,则返回true,否则返回false。
总的来说,这段代码主要是用于用户认证和授权的处理,通过判断localStorage中是否存在eletoken,以及解码后的结果是否为空,来判断当前用户是否已经登录,并将登录信息存储到Vuex store中。