附加到一个不是数组的 JS 对象?
Appending to a JS object that is not an array?
我有一个看起来像这样的对象
{
"_id": "DEADBEEF",
"_rev": "2-FEEDME",
"name": "Jimmy Strawson",
"link": "placeholder.txt",
"entries": {
"Foo": 0
}
}
通过 $.getJSON 调用将其读入我的 javascript。
所以我有保存所有这些数据的 JS 对象 "reply"。
我需要追加项目,使 "entries" 扩展如下:
{
"_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.Foo = 0
reply.entries.Bar = 30
reply.entries.Baz = 4
或reply["entries"]["Foo"] = 0
或reply.entries["Foo"] = 0
reply['entries'].push({"Bar": 0})
不起作用,因为 entries
不是 Array
but just a plain 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);
为了向 JSON 对象中插入新条目,您可以尝试这样的操作:
object["someproperty"] = somevalue;
或 object.someproperty = somevalue;
假设您在变量 someproperty
和 somevalue
中获得了键和值,您可以简单地将它们插入为:
reply.entries[someproperty] = somevalue
这里还有一个因为为什么不~见面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);
使用 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))
注意:这 不会 改变原始输入对象,而是 return 一个新的输入对象(通常是一件好事)。
这是替代方法:
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;
我有一个看起来像这样的对象
{
"_id": "DEADBEEF",
"_rev": "2-FEEDME",
"name": "Jimmy Strawson",
"link": "placeholder.txt",
"entries": {
"Foo": 0
}
}
通过 $.getJSON 调用将其读入我的 javascript。
所以我有保存所有这些数据的 JS 对象 "reply"。
我需要追加项目,使 "entries" 扩展如下:
{
"_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.Foo = 0
reply.entries.Bar = 30
reply.entries.Baz = 4
或reply["entries"]["Foo"] = 0
或reply.entries["Foo"] = 0
reply['entries'].push({"Bar": 0})
不起作用,因为 entries
不是 Array
but just a plain 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);
为了向 JSON 对象中插入新条目,您可以尝试这样的操作:
object["someproperty"] = somevalue;
或 object.someproperty = somevalue;
假设您在变量 someproperty
和 somevalue
中获得了键和值,您可以简单地将它们插入为:
reply.entries[someproperty] = somevalue
这里还有一个因为为什么不~见面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);
使用 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))
注意:这 不会 改变原始输入对象,而是 return 一个新的输入对象(通常是一件好事)。
这是替代方法:
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;