gpt4 book ai didi

javascript - 没有某些字段的深度克隆

转载 作者:可可西里 更新时间:2023-11-01 02:39:43 27 4
gpt4 key购买 nike

让我有下一个 javascript 对象。现在我想克隆它但没有一些字段。例如,我想要没有字段 "lastName""cars.age"
的克隆对象输入

{
"firstName":"Fred",
"lastName":"McDonald",
"cars":[
{
"type":"mersedes",
"age":5
},
{
"model":"bmw",
"age":10
}
]
}

输出(克隆)

{
"firstName":"Fred",
"cars":[
{
"model":"mersedes"
},
{
"model":"bmw"
}
]
}

我可以做类似的事情

var human = myJson   
var clone = $.extend(true, {}, human)
delete clone.lastName
_.each(clone.cars, function(car))
{
delete car.age
}

你知道更简单的解决方案吗?

最佳答案

如果您不介意添加对象原型(prototype),这是一个简单的解决方案。您可能希望对其进行一些修改以供您自己使用。

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"]);

关于javascript - 没有某些字段的深度克隆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14275467/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com