javascript - 与 JS 的包容性 mixin

标签 javascript node.js mixins

所以我想在使用 JS 进行 mixin 时防止覆盖共享 key ,所以我们有:

const v = {
  a: {
    b: {
      c: 4,
      d: 'str'
    }
  }
};


console.log(Object.assign({}, v, {a: {b: {c: 5}}}));

这将记录:

{ a: { b: { c: 5 } } }

但我正在寻找这个:

{ a: { b: { c: 5, d: 'str' } } }

任何人都知道如何做到这一点(最好没有库)。

最佳答案

一个相当幼稚的解决方案,无法处理循环:

const mixin = (a, b) => {

  for (let [key, val] of Object.entries(b)) {

    if (typeof val !== 'object') {
      a[key] = b[key];
      continue;
    }

    if (val === null) {
      a[key] = b[key];
      continue;
    }

    if (!a.hasOwnProperty(key)) {
      a[key] = b[key];
      continue;
    }

    mixin(a[key], b[key]);
  }

  return a;

};

const mixinInclusive = (...v) => {
  return v.reduce(mixin, {});
};


console.log(mixinInclusive(v, {a: {b: {c: 5}}}));

关于javascript - 与 JS 的包容性 mixin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56744955/

相关文章:

键中带有点的 JavaScript 字典

php - 如何使用 jQuery 将类添加到列表项

node.js - 我无法在 CENTOS 中安装 NODEJS...为什么?

css - 如何创建一个带有类作为变量的 Sass mixin

mixins - 将角色混合到可调用对象中

javascript - 什么是 $(function() { ... }) 函数以及在以下示例中何时调用它?

javascript - 失败后如何退出测试循环

node.js - 创建 React App 未安装,显示错误并中止安装

node.js - 如何使用 nodejs 在 Linux 中创建新用户

ember.js - 在 Ember.js 中创建新的 mixin 时,如何扩展多个 mixin