【问题标题】:Merge two objects and ignore unique keys合并两个对象并忽略唯一键
【发布时间】:2017-08-05 22:32:15
【问题描述】:

我有两个对象 originalcustom。我想将custom 合并到original,但忽略original 中在custom 对象中找不到的键。例如:

var original = {

    coupon: {
            coupon: "Coupon",
            couponTypes: {
                single: "Single",
            }
        },

    language: {
            Language: "Language",
            chooseLanguage: "Choose your language",
            }

        }


 var custom = {

    coupon: {
        coupon: "Coupon Details",
        couponTypes: {
            single: "Single Coupon",
        }
    }   
}

预期的结果应该是这样的:

 var result = {

     coupon: {
            coupon: "Coupon",
            couponTypes: {
                single: "Single",
            }
        }   
    }

它应该只替换自定义对象中存在的那些键的值,而忽略另一个。

【问题讨论】:

  • Uncaught SyntaxError: Unexpected token default.
  • 预期结果看起来没有被“替换”。这只是一个过滤值
  • 您的“预期结果”并不是真正预期的。你能澄清一下规则吗?
  • 我很抱歉我的粗鲁,但我没有看到任何尝试。到目前为止,您尝试过什么?
  • 我投票决定将此问题作为离题结束,因为问题没有任何努力的迹象。

标签: javascript node.js


【解决方案1】:

解决这类问题的常用方法是递归:

var def={coupon:{coupon:"Coupon",couponTypes:{single:"Single"}},language:{Language:"Language",chooseLanguage:"Choose your language"}},
    custom={coupon:{coupon:"Coupon Details",couponTypes:{single:"Single Coupon"}}};

function merge(a, b) {
  var c = {};
  for (var k in a) {
    if (k in b) c[k] = typeof b[k] === "object" ? merge(a[k], b[k]) : b[k];
  }
  return c;
}

console.log(merge(custom, def));

【讨论】:

  • 这与 OP 的预期结果不同
  • 我刚刚缩小了对象,以便强调您的逻辑。如果不需要,请还原它。 :-)
猜你喜欢
  • 2015-04-12
  • 1970-01-01
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 2016-05-01
  • 1970-01-01
相关资源
最近更新 更多