合并两个javascript对象而不覆盖

时间:2012-06-06 12:06:13

标签: javascript

我有两个javascript对象,其数据如下:

{
   "data": [
      {
         "foo": "2388163605_10150954953808606",
         "bar": {
            "xyz": "123",
         },
         "name": {
            "name": [
               {
                  "content": 1,
                  "data": "some text",
                  "id": "2388163605"
               }
            ]
         },
        },
        {
         "not_the_same": "other values",
         "foo": "different",
         "bar": {
            "xyz": "123",
         },
         "name": {
            "name": [
               {
                  "content": 1,
                  "data": "some text",
                  "id": "2388163605"
               }
            ]
         },
        }]
}

第二个:

{
   "data": [
      {
         "foo": "123+09",
         "bar": {
            "xyz": "1adad0",
         },
        },
      }]
}

正如您所看到的,属性等有所不同,当然还有值。他们也没有相同数量的物品。我试图像这样合并它们:

$.extend(true,posts, posts_object);

(posts和posts_object包含两个对象)

我想将它们合并到这个:

{
   "data": [
      {
         "foo": "2388163605_10150954953808606",
         "bar": {
            "xyz": "123",
         },
         "name": {
            "name": [
               {
                  "content": 1,
                  "data": "some text",
                  "id": "2388163605"
               }
            ]
         },
        },
        {
         "not_the_same": "other values",
         "foo": "different",
         "bar": {
            "xyz": "123",
         },
         "name": {
            "name": [
               {
                  "content": 1,
                  "data": "some text",
                  "id": "2388163605"
               }
            ]
         },
        },
      {
         "foo": "123+09",
         "bar": {
            "xyz": "1adad0",
         },
        },
      }]
}

但是,这会导致第二个对象的数据覆盖第一个对象的数据。有没有办法合并它们,而是将第二个对象中的项添加到第一个对象?

1 个答案:

答案 0 :(得分:1)

如果通过“添加项目”,则表示您希望第二个对象中 的所有属性但第一个中的最终被添加到第一个,然后:

var tmp;
$.extend(true, tmp, posts);
$.extend(true, posts, posts_object);
$.extend(true, posts, tmp);

可能会奏效。这一切都取决于你想要的复制语义。