JavaScript对象分配

时间:2017-08-25 04:14:17

标签: javascript json

我如何得到这个结果?

{"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))

5 个答案:

答案 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);