【问题标题】:Merge two option-objects with function用函数合并两个选项对象
【发布时间】:2020-12-04 22:35:25
【问题描述】:

我打算合并两个包含方法的对象:

var options = {
    show: function() {
        console.log(1);
    }
}

var options2 = {
    show: function() {
        console.log(3);
    }
}

options = $.merge(options, options2);

但如果我这样做 console.log(options.show) 我只会收到第一个数组。

我的问题是,如何将 options 数组与 options2 合并?

【问题讨论】:

  • 你想做什么?由于两个函数具有相同的名称并且您有语法错误,所以它不是cosole 而是console
  • 您对合并的想法的期望结果是什么?但是 $.merge 函数适用于数组,您的选项是对象。合并的结果就是第一个对象。如果在对象周围添加方括号,您将获得一个包含 2 个对象的数组。所以问题是你的要求是什么?一个包含 2 个对象的数组?或者打印两个显示功能结果的东西?还是其他?
  • 我正在尝试将两个 console.log() 合并到一个显示选项中

标签: javascript jquery arrays merge extend


【解决方案1】:

您可以在第一个功能块内调用其他功能

var options = {
    show: function() {
        console.log(1);
        options2.show();
    }
}

var options2 = {
    show: function() {
        console.log(3);
    }
}

options.show();

【讨论】:

    【解决方案2】:

    由于“相同的属性”名称,它们将在您合并时覆盖。 使用解构和重命名,Object.assign 应该可以工作。

    var options = {
        show: function() {
            console.log(1);
        }
    }
    
    var options2 = {
        show: function() {
            console.log(3);
        },
        other: () => console.log('other')
    }
    
    const { show: show2, ...rest2 } = options2;
    
    Object.assign(options, { show2 }, rest2);
    
    options.show();
    options.show2();
    options.other();

    【讨论】:

      【解决方案3】:

      你可能想要这样的东西

      var options = { show: function () { console.log(1); }, };
      var options2 = { show: function () { console.log(3); }, };
      res = Object.entries(options).map((o) => ({ [o[0]]: [o[1], options2[o[0]]] }));
      console.log(res[0]);
      console.log(res[0].show)

      【讨论】:

        猜你喜欢
        • 2021-03-08
        • 1970-01-01
        • 2019-12-02
        • 1970-01-01
        • 2018-03-30
        • 2020-02-04
        • 2015-01-26
        • 1970-01-01
        • 2012-04-25
        相关资源
        最近更新 更多