Javascript JQuery与extend相反(reduce对象)
我面临的下一个问题是,我可以合并/扩展对象,并且工作得很好,但是现在我需要做与扩展对象相反的事情,JQuery文档: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
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
对象有什么帮助?