Javascript JQuery与extend相反(reduce对象)

Javascript JQuery与extend相反(reduce对象),javascript,jquery,Javascript,Jquery,我面临的下一个问题是,我可以合并/扩展对象,并且工作得很好,但是现在我需要做与扩展对象相反的事情,JQuery文档: var object1 = { apple: 0, banana: { weight: 52, price: 100 }, cherry: 97 }; var object2 = { banana: { price: 200 }, durian: 100 }; // Merge object2 into object1, recursively $.exte

我面临的下一个问题是,我可以合并/扩展对象,并且工作得很好,但是现在我需要做与扩展对象相反的事情,JQuery文档:

var object1 = {
  apple: 0,
  banana: { weight: 52, price: 100 },
  cherry: 97
};
var object2 = {
  banana: { price: 200 },
  durian: 100
};

// Merge object2 into object1, recursively
$.extend( true, object1, object2 );

// Result
{"apple":0,"banana":{"weight":52,"price":200},"cherry":97,"durian":100}
这很酷,而且效果很好,但是我如何获得相反的操作,例如获得如下输出:

{"apple":0,"banana":{"weight":52},"cherry":97}

没有此类函数,但您可以编写自己的:

$.prototype.reduce = function reduce(obj1, obj2) {
  for (var k in obj2) {
    if (obj1.hasOwnProperty(k) && obj2.hasOwnProperty(k)) {
      if (typeof obj1[k] == "object" && typeof obj2[k] == "object") {
         reduce(obj1[k], obj2[k]);
      }
      else delete obj1[k];
    }
  }
}

在JavaScript中,您可以使用
delete
操作符从对象中完全删除属性:

var foo={
酒吧:“这是酒吧”
};
snippet.log(foo.bar);//“这是酒吧”
snippet.log(foo.hasOwnProperty('bar'));//真的
删除foo.bar;
snippet.log(foo.hasOwnProperty('bar'));//错误

我也遇到过这样的问题。我必须实现递归reduce操作:

$.reduce({a: 1, b: 2}, {b: 12, e: 13}) => {a: 1, b: 12}
我是这样做的

$.reduce = function reduce(templateObj, toReduce, modifyCopy, doNotAppend) {
    if (!toReduce) {
        return toReduce;
    }
    if (!templateObj) {
        return toReduce;
    }
    // not changing the src toReduce
    var toModify = modifyCopy
        ? $.extend(true, {}, toReduce)
        : toReduce;

    // will append missing properties from templateObj 
    var merged = doNotAppend
        ? toModify
        : $.extend(true, {}, templateObj, toModify);
    // go through all the properties in toReduce or (templateObj + toReduce)
    $.each(merged, function (propName, value) {
        if (!(propName in templateObj)) {
            delete toModify[propName];
            return;
        }
        if (!(propName in toModify)) {
            toModify[propName] = templateObj[propName];
            return;
        }
        if (typeof templateObj[propName] == "object" && typeof toModify[propName] == "object") {
            toModify[propName] = $.reduce(templateObj[propName], toModify[propName]);
        }
    });
    return toModify;
}

这对嵌套的
banana
对象有什么帮助?