如何在动态中将JavaScript对象添加到另一个对象中

19

假设我有几个JavaScript对象

{"type":"gotopage","target":"undefined"}
{"type":"press","target":"a"}
{"type":"rotate","target":"long"}

我怎样才能将这些对象添加到另一个对象中,就像这样

config={}

我知道如果每个插入的对象都有一个ID,我可以这样添加:

config["id"]={}

但在这种情况下,我如何添加没有id的对象?


可能是重复的问题:如何动态合并两个JavaScript对象的属性? - Gabe Gates
7个回答

16
var obj1 = {"type":"gotopage","target":"undefined"};

var config = {};
config.obj1 = obj1;

您可以稍后随时添加它们。

var obj1 = {"type":"gotopage","target":"undefined"};

var config = {};
config.obj1 = obj1;

var obj2 = {"key":"data"};
config.obj2 = obj2;

1
但是我不知道我有多少个对象,我不能事先定义它们。 - hh54188

9

我认为你混淆了对象和数组。对象有命名的键,数组有数字键。你可以使用.push()轻松地向数组中添加元素:

var arr = [];
arr.push("something");

然而,对于一个配置对象来说,像你的变量名所示这并不是很有用。相反,你应该为你的选项使用有意义的名称,例如:

var config = {
    something: 'blah',
    foo: 'bar'
};

你可以在对象中存储一个数组:
config.manyStuff = [];
for(...) {
    manyStuff.push(...);
}

5
如果您想要添加对象,可以使用扩展运算符轻松地添加。
示例 ->
object1 = { property1: 1, property2: 2}
finalObject = [{...object1}]

finalObject = {...object1}

根据您的问题解决方案,在此处使用数组对象

finalObject = [{...object1}]

object1 = { property1: 1, property2: 2}
    finalObject = [{...object1}]
    document.getElementById("demo").innerHTML = JSON.stringify(finalObject);
<div id = "demo"></div>


实际上,这将重置finalObject,而不是像原始问题所要求的那样添加到它。 - Aurovrata

2
如果您有的数据类型相同,那么请使用数组代替:
var some_data = {"type":"gotopage","target":"undefined"}

var config = [];
var config.push(some_data); //and do this for the rest

您可以像这样访问配置项:

var someVariable = config[index]; //where index is a number starting from 0

0
将一个对象的内容添加/附加到另一个对象中,例如:
let obj = { id:"hello", class: "world"};
let extra = {style:"{color:red}"};

obj = {...obj, ...extra}; //extra values will be appended to obj.

然而,请注意,如果您的原始对象被声明为const,那么它将无法重新赋值,因此以下解决方案将起作用。
const obj = {id:"hello", class: "world"};
let extra = {style:"{color:red}"};

Object.keys(extra).forEach(k=> obj[k] = extra[k]);

0

我正在使用这个实用函数:

module.exports.combine = function() {

  var rv = {};
  for (i = 0; i < arguments.length; i++) {
    for (thing in arguments[i]) {
        rv[thing]=arguments[i][thing];
    }
  }
  return rv;
}

具有相同名称的属性将被后续参数中的属性覆盖

var util = require('lib/util.js');
console.log(util.combine(
  {"1":"one","two":function(){;},
  {"four":{"four.5":"four.5-b"}, "5":"foo"}});

结果:

    { '1': 'one',
    '5': 'foo',
    two: [Function],
    four: { 'four.5': 'four.5-b' } }

-2
如果您想在初始化期间添加它们,这可能会对您有所帮助:
 var config = [
               {"type":"gotopage","target":"undefined"},
               {"type":"press","target":"a"},
               {"type":"rotate","target":"long"}
              ]

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