首页 > 解决方案 > 如果变量存在并且它是一个对象,如何合并对象?

问题描述

我正在尝试如何合并两个变量,它是一个对象?

我试过这个似乎有效:

let data1 = {
  data1: "data1"
}

let data2 = {
  data2: "data2"
}

const items = {
  ...(data1 && typeof data1 === 'object' && { ...data1 }),
  ...(data2 && typeof data2 === 'object' && { ...data2 }),
}

console.log(items);

这很好,或者除非我把它复杂化了?

标签: javascriptnode.js

解决方案


...如果变量存在...

如果你的意思是字面意思,变量可能没有被声明,那么你需要将typeof检查移到前面以避免尝试读取未声明变量的值。您还可以利用传播undefinednull或布尔值(如false)不执行任何操作(包括不导致错误)这一事实。

在这里,我添加了一个data3不存在的内容来显示该部分的实际效果:

let data1 = {
    data1: "data1",
};

let data2 = {
    data2: "data2",
};

const items = {
    ...typeof data1 === "object" && data1,
    ...typeof data2 === "object" && data2,
    ...typeof data3 === "object" && data3,
};

console.log(items);

它是如何工作的(以data1示例为例):

  1. typeof data1 === "object"告诉我们两件事:
    • 有一个称为范围内的标识符data1(这意味着我们可以读取它的值而不必担心ReferenceError为未声明的变量获取 a)
    • thatdata1的值是类型"object"
  2. 这与&& data1意味着我们将使用这些值之一进行传播:
    • false如果typeof data1 === "object"false, 或
    • 的值data1,可以是对象,也可以是null

传播null不做任何事情,传播false也不做任何事情,所以我们要么从该传播操作中获得任何属性,要么获得data1引用的对象的自己的、可枚举的属性。


推荐阅读