如何在变量存在且为对象时合并对象?现有实现是否过于复杂?
如何在变量存在且为对象时合并多个对象?
我想了解如何在变量存在且其类型为对象时合并多个对象。目前我正在尝试合并两个对象变量,编写了如下代码,该代码似乎可以正常运行:
let data1 = { data1: "data1" } let data2 = { data2: "data2" } const items = { ...(data1 && typeof data1 === 'object' && { ...data1 }), ...(data2 && typeof data2 === 'object' && { ...data2 }), } console.log(items);请问上述实现是否合理,还是我将问题过度复杂化了?
你的代码逻辑是合理且能正常工作的,它确实精准实现了「仅当变量存在且为对象时才合并该对象」的需求——短路运算符&&会在前面的条件不满足时返回假值,而对象展开语法...会自动忽略undefined、false这类假值,所以这部分的核心逻辑是没问题的。
不过确实可以简化写法,让代码更简洁易读,同时还能规避一些潜在问题:
1. 先修正一个小冗余
原代码里的{ ...data1 }是多余的——如果data1已经是符合要求的对象,直接...data1就足够了,没必要再额外包裹一层对象展开。也就是说,这部分可以简化成:
...(data1 && typeof data1 === 'object' && data1)
2. 补上null判断(重要)
这里有个容易忽略的点:typeof null返回的也是'object',如果你的变量有可能是null,原代码会尝试展开null导致报错。所以建议加上null的判断,让逻辑更严谨:
const items = { ...(data1 && typeof data1 === 'object' && data1 !== null && data1), ...(data2 && typeof data2 === 'object' && data2 !== null && data2) };
3. 封装成工具函数(适合多次使用)
如果需要频繁处理这类合并,可以把判断逻辑封装成小工具函数,让代码更整洁:
function getMergableObj(obj) { // 排除 null、非对象类型、undefined return obj && typeof obj === 'object' && obj !== null ? obj : {}; } let data1 = { data1: "data1" }; let data2 = { data2: "data2" }; const items = { ...getMergableObj(data1), ...getMergableObj(data2) }; console.log(items); // { data1: "data1", data2: "data2" }
总结
你的核心思路完全没问题,只是存在一点冗余和潜在的null风险,调整后会更健壮简洁。不算过度复杂化,毕竟你准确覆盖了「变量存在+是对象」的前置条件,这本身就是合理的严谨性体现。
内容的提问来源于stack exchange,提问作者I'll-Be-Back
相关产品推荐
相关产品推荐

