将JavaScript对象添加到JavaScript对象

54

我想要在另一个JavaScript对象中拥有JavaScript对象,如下所示:

Issues:

  - {"ID" : "1", "Name" : "Missing Documentation", "Notes" : "Issue1 Notes"}
  - {"ID" : "2", "Name" : "Software Bug", "Notes" : "Issue2 Notes, blah, blah"}
  - {"ID" : "2", "Name" : "System Not Ready", "Notes" : "Issue3 Notes, etc"}
  // etc...

因此,我希望“问题”可以容纳这些JavaScript对象,这样我就可以只是说Issues [0] .Name或Issues [2] .ID等等。

我已经创建了外部的Issues JavaScript对象:

var jsonIssues = {};

我已经到了需要添加JavaScript对象的地步,但不知道如何操作。我想能够这样说:

Issues<code here>.Name = "Missing Documentation";
Issues<code here>.ID = "1";
Issues<code here>.Notes = "Notes, notes notes";
有没有办法做到这一点?谢谢。 更新: 根据给出的答案,声明了一个数组,并根据需要将JavaScript对象推入数组中:
var jsonArray_Issues = new Array();

jsonArray_Issues.push( { "ID" : id, "Name" : name, "Notes" : notes } );
感谢各位的回复。

10
有很多答案教你将其转换为数组(我看到最后您也这样做了)。我知道这是一个老问题,但是有一个新解决方案。 对于任何人来寻找如何向对象添加对象的答案,请查看Object.assign。(它是新的,但是这个问题在搜索中排名较高)我花了很多时间寻找一个不涉及创建数组并将其转换回去的解决方案。这里是规范: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign - O Genthe
7个回答

62
var jsonIssues = []; // new Array
jsonIssues.push( { ID:1, "Name":"whatever" } );
// "push" some more here

1
@jldupont,感谢您的回答!当我提出问题时,我没有考虑数组。但这很有道理。 - Matt
这对于unshift也适用吗?因为我想将对象添加到第一个位置。 - Sagar Devanga

41

由于我的第一个对象是一个原生JavaScript对象(像一个对象列表),push在我的情况下不起作用,但我通过添加以下新键来解决了问题:

MyObjList['newKey'] = obj;

此外,了解如何删除之前插入的相同对象可能会很有用:

delete MyObjList['newKey'][id];

希望这能像它帮助了我一样帮助到其他人。


7
这似乎是对原问题最好的技术回答。 - captainrad

9
var jsonIssues = [
 {ID:'1',Name:'Some name',Notes:'NOTES'},
 {ID:'2',Name:'Some name 2',Notes:'NOTES 2'}
];

如果您想向数组中添加内容,则可以这样做:
jsonIssues[jsonIssues.length] = {ID:'3',Name:'Some name 3',Notes:'NOTES 3'};

或者你可以使用另一个人发布的推送技术,这也是不错的选择。


那么基本上,我会有一个JSON对象数组? - Matt
2
我相信楼主也想知道如何将对象添加到您所拥有的内容中。 - Crescent Fresh
您将拥有一个JavaScript对象数组。JSON只是一种序列化方式,恰好符合JavaScript的子集。 - Quentin
是的,抱歉,您可以像手动构建数组一样添加到它。 - Zoidberg

6

4
如果不是对象数组,可以这样做:
let student= {
  name : 'Mr. Anderson',
  id: 35
}

student['grade'] = 10; //for a property. 

结果:

student= {
  name : 'Mr. Anderson',
  id: 35,
  grade:10
}

你也可以添加一个对象:

let student= {
 personalData:{
  //personal data key-value
 }
}

let academicData = {
 //academic data key-value
}

student['academicData'] = academicData;

结果:

 student{
        personalData{},
        academicData{}
    }

1
jsonIssues = [...jsonIssues,{ID:'3',Name:'name 3',Notes:'NOTES 3'}]

0
如果你有第一个对象中的属性,且你需要将你的对象添加到其中,则 Object.assign() 将擦除它。
为了避免这种损失,我编写了下面的函数。请注意,它通过引用复制嵌套的对象。
首先,您应该将要添加到您的对象中的所有对象添加到一个数组中。您可以使用 arr.push() 轻松完成此操作。然后只需使用该函数即可。
function addMyObjs (objInit, arrWithObjs) {
    let map = new Map();
    for (let [key, value] of Object.entries(objInit)) {
        map.set(key, value);
    }
    arrWithObjs.forEach((item) => {
        for (let [key, value] of Object.entries(item)) {
            map.set(key, value);
        }
    });
    return Object.fromEntries(map);
}

let objSecond = {id: 2,};

let obj = {
    name: "Tolya",
    age: 33,
    sex: "man",
};

let obj3 = {"fruits": {"apples": true, "plums": false,}};

let arr = [obj, obj3];

objSecond = addMyObjs(objSecond, arr);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接