追加到一个不是数组的JS对象?
我有一个像这样的对象
{ "_id": "DEADBEEF", "_rev": "2-FEEDME", "name": "Jimmy Strawson", "link": "placeholder.txt", "entries": { "Foo": 0 } }
用$ .getJSON调用读入我的javascript。
所以我有JS对象“回复”,其中包含所有这些数据。
我需要附加项目,使“条目”扩展如下:
{ "_id": "DEADBEEF", "_rev": "2-FEEDME", "name": "Jimmy Strawson", "link": "placeholder.txt", "entries": { "Foo": 0, "Bar": 30, "Baz": 4 } }
我努力了
reply['entries'].push({"Bar": 0});
但这是行不通的(我认为,因为没有一个数组)
有人可以提供一种替代方法吗?
reply['entries'].push({"Bar": 0})
不起作用,因为entries
不是Array
types的,而只是一个普通的Object
。
使用reply['entries']["Bar"]
或reply.entries.Bar
。 看下面的演示:
var reply = { "_id": "DEADBEEF", "_rev": "2-FEEDME", "name": "Jimmy Strawson", "link": "placeholder.txt", "entries": { "Foo": 0, "Bar": 30, "Baz": 4 } } reply['entries']["Bar"] = 0; console.log(reply);
有了ES2017,你可以使用:
const input = ( { _id: 'DEADBEEF' , _rev: '2-FEEDME' , name: 'Jimmy Strawson' , link: 'placeholder.txt' , entries: ( { Foo: 0 } ) } ) const output = ( { ...input , entries: ( { ...input.entries , Bar: 30 , Baz: 4 } ) } ) console.info(JSON.stringify(output, null, 2))
这里还有一个,因为为什么不符合Object.assign
let reply = {"_id":"DEADBEEF","_rev":"2-FEEDME","name":"Jimmy Strawson","link":"placeholder.txt","entries":{"Foo":0}}; Object.assign(reply.entries, { Bar: 30, Baz: 4, 'Bar Baz': 0 }); console.log('reply =', reply);
它成为一个对象,所以只需添加你想要的:
reply.entries.Foo = 0 reply.entries.Bar = 30 reply.entries.Baz = 4
或reply["entries"]["Foo"] = 0
或reply.entries["Foo"] = 0
为了向JSON对象中插入新条目,可以尝试如下所示:
object["someproperty"] = somevalue;
或object.someproperty = somevalue;
假设你已经获得了someproperty
属性和somevalue
值的variables中的键和值,可以简单地将它们插入为:
reply.entries[someproperty] = somevalue
这是另一种方法:
reply = { "_id": "DEADBEEF", "_rev": "2-FEEDME", "name": "Jimmy Strawson", "link": "placeholder.txt", "entries": { "Foo": 0 } } reply.entries.Bar=30; reply.entries.Baz=4; reply["entries"]["Bar"]=30; reply["entries"]["Baz"]=4;