我的数据对象:
var data = {
foo: {
bar: 42
},
baz: true,
x: 1,
y: 2
};
现在我想将此对象作为JSON字符串发送。 但在发送之前,我想修改我的对象和仍保留原始对象。
var json = data;
json.foo = json.foo.bar;
json.id = json.baz;
delete json.baz;
当然这也会修改我的data
对象。
是否可以创建第二个对象,其结构与第一个对象相同,允许重命名/删除某些属性而不用更改第一个对象?
我知道我可以这样做:
var json = {
foo: data.foo.bar,
id: data.baz,
x: data.x,
y: data.y
};
但是假设data
对象包含50个属性,我只想更改其中两个属性。
由于性能原因,我不想使用jQuery.copy
或angular.copy
(他们会创建真实副本 - 这不应该是必要的)
也许有这样的事情?
var json = {
foo: data.foo.bar,
id: data.baz
};
json = merge(json, data);
delete json.baz;
谢谢! :)
答案 0 :(得分:2)
您可以使用angular.extend()
或jQuery.extend()
仅复制原始对象自己的属性。即浅拷贝
var json = angular.extend({}, data);
json.foo = data.foo.bar;
json.id = data.baz;
delete json.baz;
或
var json = angular.extend({}, data, {
foo: data.foo.bar,
id: data.baz
});
delete json.baz;
请注意,以下内容无法发挥作用,因为data
foo
将覆盖第一个参数对象的foo
。
var json = angular.extend({
foo: data.foo.bar,
id: data.baz
}, data);
delete json.baz;