你如何对JavaScript对象执行`push`?

时间:2017-09-21 23:00:24

标签: javascript arrays json object

我想要实现的是在 JavaScript对象上使用push(),如下所示:

var apps = {
    app1:
    [
        "ci-extension",
        "Unnamed",
        "<h1>Hello world!</h1>"
    ],
    app2:
    [
        "ci-extension",
        "Another one!",
        "Cool!"
    ]
}

目标是添加第三个键&#34; 演示&#34;到对象,然后再推三行。 所以在推动之后,对象应该如下所示:

var apps = {
    app1:
    [
        "ci-extension",
        "Unnamed",
        "<h1>Hello world!</h1>"
    ],
    app2:
    [
        "ci-extension",
        "Another one!",
        "Cool!"
    ],
    demo:
    [
        "ci-google",
        "My demo app!",
        "Some content"
    ]
}

我尝试了什么?

我尝试了以下代码Object.keys(apps).push("demo");(如果这有意义的话)。作为输出,我只是 3 和关键&#34;演示&#34;未添加到对象中。
然后将项目添加到 demo 我尝试使用这一小段代码 Object.keys(apps)["demo"].push("blah blah blah...");,但它完全不起作用。

<小时/> 我的大脑和思想被混淆了。任何帮助将受到高度赞赏,非常欢迎。提前致谢!

2 个答案:

答案 0 :(得分:2)

这里你不需要push(),这是为了添加到一个现有阵列。你只想添加一个密钥。最简单的方法是:

apps.demo = [ "ci-google", "My demo app!", "Some content" ];

或等同地

apps["demo"] = [ "ci-google", "My demo app!", "Some content" ];

你的代码不起作用的原因是因为Object.keys( apps )创建了一个包含apps对象中所有键的新数组,但是对该数组执行任何操作都不会对实际执行任何操作apps对象 - 您只是在编辑新数组。您需要做的是直接更改应用程序对象(如上所示)。

答案 1 :(得分:0)

注意:Duncan的答案具有最低的学习曲线。

说到这一点 - 特别是因为你已经在内置对象类型上使用了.keys()方法 - 你可以看到两个选项:

  1. Object.assign()
  2. Object.create()
  3. 两个方法都将返回包含属性的新对象,并将其作为第二个参数传递给函数。

    Object.assign(demo, {new_property})将返回一个带有演示拥有属性的对象 - 从而忽略了原型链。

    Object.create(demo, {new_property})会将prototype linked的对象返回给demo。