You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在变量存在且为对象时合并对象?现有实现是否过于复杂?

如何在变量存在且为对象时合并多个对象?

我想了解如何在变量存在且其类型为对象时合并多个对象。目前我正在尝试合并两个对象变量,编写了如下代码,该代码似乎可以正常运行:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 01:27:43