【问题标题】:merge 2 objects without overwriting "false" value合并 2 个对象而不覆盖“假”值
【发布时间】:2018-04-22 17:56:47
【问题描述】:

我有 2 个对象
var obj1 = {a: 1, b: true, c: false};
var boj2 = {b: true, c: true, d: 1};

我想有一个这样的两个对象的联合:
{a: 1, b: true, c: false, d: 1};

我尝试过使用$.extend,但它覆盖了c,我得到了
{a: 1, b: true, c: true, d: 1};

有什么建议吗?

【问题讨论】:

  • 最后c 应该是true 还是false?
  • 第一个对象值必须有优先级,所以应该是false
  • 真的是你想保留的“假”,还是 obj1 的值比 obj2 的优先级高?
  • 对不起,我只好把$.extend函数里的2个参数颠倒过来了……尴尬,是疲劳惹的祸……

标签: javascript jquery


【解决方案1】:

你试过用谷歌搜索吗?答案可以在here或here找到,看你的意愿:

  1. 创建一个新对象并将 obj1 和 boj2 合并到该对象中。但是你最终会得到一个新对象,所以当你需要修改第一个对象时不要使用它。示例可以在链接 1 中找到。
  2. 为此创建您自己的方法。示例可以在链接 2 中找到。

【讨论】:

    【解决方案2】:

    我整理了一个 JSFiddle 可能有助于解决您的问题 - 请参阅 https://jsfiddle.net/fhjuL22s/1/

    var obj1 = {a: 1, b: true, c: false, e: 0}; 
    var obj2 = {b: true, c: true, d: 1, e: 1};
    
    var result = {};
    
    for (var prop in obj1){
        result[prop] = obj1[prop]
        ? (obj2.hasOwnProperty(prop) ? obj2[prop] : obj1[prop])
        : obj1[prop];
    }
    
    for (var prop in obj2) {
        if (!result.hasOwnProperty(prop))
        result[prop] = obj2[prop];
    }
    
    console.log(result)
    

    【讨论】:

      【解决方案3】:

      你可以颠倒顺序

      var obj1 = {a: 1, b: true, c: false}; 
      var obj2 = {b: true, c: true, d: 1};
      console.log($.extend(obj2,obj1));
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

      【讨论】:

        猜你喜欢
        • 2014-01-02
        • 2011-11-24
        • 2017-11-27
        • 1970-01-01
        • 1970-01-01
        • 2020-04-21
        • 1970-01-01
        • 2017-09-22
        • 2020-03-10
        相关资源
        最近更新 更多