附加到一个不是数组的 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;

假设您在变量 somepropertysomevalue 中获得了键和值,您可以简单地将它们插入为:

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;