[英]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.