簡體   English   中英

如何合並兩個Java腳本對象/變量

[英]How to merge two java script objects/variables

我有

object1 = {"abc":{"name":"myabcname"}}
object2 = {"def":{"name":"defname"}}

我想形成一個對象/字符串,即用逗號分隔兩個對象值。

{"abc":{"name":"myabcname"},"def":{"name":"defname"}};

當我嘗試執行console.log(JSON.stringify(object1)+JSON.stringify(object2))其打印內容如下{"abc":{"name":"myabcname"}}{"def":{"name":"defname"}}

您可以使用Object.assign實現此目的:

 var object1 = {"abc":{"name":"myabcname"}}; var object2 = {"def":{"name":"defname"}}; var mergedObject = Object.assign({}, object1, object2); console.log(mergedObject); 

您可以使用jquery $ .extend

//merging two objects & create new one
var new_object = $.extend({}, object1, object2);


//Merge object2 into object1, recursively
$.extend( true, object1, object2 );

如果使用的是jquery,則可以將第一個對象$ .extend擴展到第二個對象。

jQuery .extend()會將兩個對象合並為第三個對象如果已指定) (除了 @Alberto 的答案)

 // from jQuery docs var object1 = { apple: 0, banana: { weight: 52, price: 100 }, cherry: 97 }; var object2 = { banana: { price: 200 }, durian: 100 } var object3 = {}; $.extend(object3, object1, object2 ); console.log(object3); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

您可以這樣:

object1 = {"abc":{"name":"myabcname"}}
object2 = {"def":{"name":"defname"}}
obj = []
obj[Object.keys(object1)[0]] = object1
obj[Object.keys(object2)[0]] = object2

您可以使用Object.assign實現此目的,但是如果要支持“ Internet Explorer”(IE8,IE9,IE10和IE11),則需要使用此Polyfill:

if (typeof Object.assign != 'function') {
  Object.assign = function(target, varArgs) { // .length of function is 2
    'use strict';
    if (target == null) { // TypeError if undefined or null
      throw new TypeError('Cannot convert undefined or null to object');
    }

    var to = Object(target);

    for (var index = 1; index < arguments.length; index++) {
      var nextSource = arguments[index];

      if (nextSource != null) { // Skip over if undefined or null
        for (var nextKey in nextSource) {
          // Avoid bugs when hasOwnProperty is shadowed
          if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {
            to[nextKey] = nextSource[nextKey];
          }
        }
      }
    }
    return to;
  };
}

參考: MDN

采用:

 var obj1 = {"abc":{"name":"myabcname"}}; var obj2 = {"def":{"name":"defname"}}; var mergedObj = Object.assign({}, obj1, obj2); console.log(mergedObj); 

為了獲得您呈現的形式的字符串,可以使用:

var object1 = {"abc":{"name":"myabcname"}};
var object2 = {"def":{"name":"defname"}};
var myObject = Object.assing({}, object1, object2);
var myString = JSON.stringify(myObject);
// "{"abc":{"name":"myabcname"},"def":{"name":"defname"}}"

使用Object.assign的危險 -它只是一個深層副本。 例:

var me = {
  name: "Tomasz",
  lastName: "Bubała",
  social: {
    github: "@tomegz",
    twitter: "@tomaszbubala"
  }
};

var dev = Object.assign({}, me);
/* This is fine */
dev.name = "Tom";
// => "Tom"
me.name;
// => "Tomasz"
/* This is danger */
dev.social.twitter = "@example";
// => "@example"
me.social.twitter;
// => "@example"

希望在ES7中,您將能夠使用傳播運算符來實現以下效果:

var myObject = {...object1, ...object2};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM