如果您不介意添加到对象原型,这是一个简单的解决方案。您可能需要对其进行一些修改以供自己使用。
Object.prototype.deepOmit = function(blackList) {
if (!_.isArray(blackList)) {
throw new Error("deepOmit(): argument must be an Array");
}
var copy = _.omit(this, blackList);
_.each(blackList, function(arg) {
if (_.contains(arg, '.')) {
var key = _.first(arg.split('.'));
var last = arg.split('.').slice(1);
copy[key] = copy[key].deepOmit(last);
}
});
return copy;
};
Array.prototype.deepOmit = function(blackList) {
if (!_.isArray(blackList)) {
throw new Error("deepOmit(): argument must be an Array");
}
return _.map(this, function(item) {
return item.deepOmit(blackList);
});
};
然后当你有一个像这样的对象时:
var personThatOwnsCars = {
"firstName":"Fred",
"lastName":"McDonald",
"cars":[
{
"type":"mersedes",
"age":5
},
{
"model":"bmw",
"age":10
}
]
};
你可以像这样施魔法。
personThatOwnsCars.deepOmit(["firstName", "cars.age"]);
甚至像这样的魔法!
[person1, person2].deepOmit(["firstName", "cars.age"]);