我如何得到这个结果?
{"obj1": {
"title": "title",
"data": [1,2,3]
},
"obj2": {
"title": "title",
"data": [4,5,6]
},
"obj3": {
"title": "title",
"data": [7,8,9]
}}
var obj = {title:'title'}
var newobj = {};
newobj.obj1 = obj;
newobj.obj2 = obj;
newobj.obj3 = obj;
newobj.obj1.data = [];
newobj.obj1.data = [1,2,3];
newobj.obj2.data = [];
newobj.obj2.data = [4,5,6];
newobj.obj3.data = [];
newobj.obj3.data = [7,8,9];
console.log(JSON.stringify(newobj))
答案 0 :(得分:1)
在Js中,您可以使用对象文字表示法直接创建对象,它的优点在于它允许您定义属性。
只需使用
var obj = { OBJ1:{ “标题”:“标题”, “数据”:[1,2,3] }, obj2:{ “标题”:“标题”, “数据”:[4,5,6] }, obj3:{ “标题”:“标题”, “数据”:[7,8,9] }}
答案 1 :(得分:0)
我相信你的问题是你正在设置newobj.obj1,obj2和obj3 all = obj。这是通过引用完成的,所以当你更新每个obj1,2,3的数据时,你实际上正在更新对obj的引用,所以更新它们。
答案 2 :(得分:0)
在您的示例中,可以删除第8,11和14行。
此外,javascript中的对象是对内存中某个位置的引用。所以当你这样做时:
newobj.obj1 = obj;
newobj.obj2 = obj;
newobj.obj3 = obj;
你说newobj.obj1,newobj.obj2,newobj.obj3指向内存中完全相同的位置。这意味着如果你修改obj1,你也修改了obj2和obj3。你需要确保它们是这样的独特对象:
var newobj = {};
newobj.obj1 = {title:'title'};
newobj.obj2 = {title:'title'};
newobj.obj3 = {title:'title'};
newobj.obj1.data = [1,2,3];
newobj.obj2.data = [4,5,6];
newobj.obj3.data = [7,8,9];
console.log(JSON.stringify(newobj))
这不是让它们与众不同的唯一方法,但重点是它们需要在内存中拥有自己的位置。
答案 3 :(得分:0)
您已将obj
分配给newObj
的媒体资源。这不会为这些属性分配新对象,这基本上意味着他们只是引用obj
。当它被引用时,无论何时对该引用进行更改,引用它的所有其他位置都会更改。
您需要做的是复制obj
,然后将其分配给newObj
的权利。 {}
中的...
语法会创建一个包含obj
属性的新对象。
var obj = {title:'title'}
var newobj = {};
newobj.obj1 = { ...obj };
newobj.obj2 = { ...obj };
newobj.obj3 = { ...obj };
newobj.obj1.data = [1,2,3];
newobj.obj2.data = [4,5,6];
newobj.obj3.data = [7,8,9];
console.log(JSON.stringify(newobj));

答案 4 :(得分:-1)
您只需使用构造函数
即可function DataObj(title, data) {
this.title = title;
this.data = data;
}
var newObj = {
obj1: new DataObj('title', [1,2,3]),
obj2: new DataObj('title', [4,5,6]),
obj3: new DataObj('title', [7,8,9])
}
console.log(newObj);