javascript - 合并 javascript 中的对象,同时忽略未定义的属性值(jQuery.fn.extend 行为)

标签 javascript typescript

我正在寻找 typescript/javascript 中 jQuery.fn.extend 的实现。具体来说,我对它忽略源对象中的未定义值的部分感兴趣。

const obj1 = {
  a: 1,
  b: undefined
};

const obj2 = {
  a: undefined, // Should be ignored.
  b: 100
};

const merged = $.extend(obj1, obj2);

console.log(merged); // {a: 1, b: 100}

要合并的对象的结构不一定是众所周知的,并且一个对象可能包含比另一个对象更多的属性。

最佳答案

您可以定义一个辅助函数,该函数将创建一个删除了 undefined 属性的对象:

const definedProps = obj => Object.fromEntries(
    Object.entries(obj).filter(([k, v]) => v !== undefined)
);

然后合并变成:

const merged = Object.assign(obj1, definedProps(obj2));

const obj1 = {
  a: 1,
  b: undefined
};

const obj2 = {
  a: undefined, // Should be ignored.
  b: 100
};

const definedProps = obj => Object.fromEntries(
    Object.entries(obj).filter(([k, v]) => v !== undefined)
);
const merged = Object.assign(obj1, definedProps(obj2));

console.log(merged);

此解决方案使用 Object.fromEntries这是相当新的,但很容易填充

Object.fromEntries = arr => Object.assign({}, ...arr.map( ([k, v]) => ({[k]: v}) ));

关于javascript - 合并 javascript 中的对象,同时忽略未定义的属性值(jQuery.fn.extend 行为),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56650634/

相关文章:

typescript - 在 Midnight Commander 中查看 typescript .ts 文件

angular - 直接 URL 路由工作正常,但不适用于域名

reactjs - Jest 测试在 tsx 语法上失败

javascript - 使用 Python 获取 DHCP 客户端列表

javascript - 从ROOT加载文件

javascript - 获取/监听 channel 中的新消息

javascript - CommonJS 函数声明范围的良好实践

javascript - 使用缩略图制作模态图像

在 WebStorm 11 中使用 TypeScript 调试 Ionic 2 项目

typescript - 如何从 typescript 中的类中提取类型?