合并并序列化javascript对象

合并并序列化javascript对象,javascript,angularjs,Javascript,Angularjs,我想合并嵌套的javascript对象。当我知道物体的长度是一时,我很简单。但是由于长度增加了,我需要一种动态的方式来合并地址键并序列化我的对象 var old = {account: "100000", address: {city: "LONDON", companyName: "Test IQUE", country: "UK", postalCode: "SW1A 2AA",}, met

我想合并嵌套的javascript对象。当我知道物体的长度是一时,我很简单。但是由于长度增加了,我需要一种动态的方式来合并
地址
键并序列化我的对象

var old =  {account: "100000", address: {city: "LONDON", companyName: "Test IQUE", country: "UK", postalCode: "SW1A 2AA",}, meterName: "DM9"}
当lenght 1岁的时候,这对我很有效

var new = {   
              'account' : "100000",                         
              'address' : "LONDON, UK"
              'companyName' : "Test IQUE",
              'postalCode' : "SW1A 2AA",   
              'meterName' : "DM90"
           },
           {   
              'account' : "1000001",                         
              'address' : "LONDON, UK"
              'companyName' : "Test IQUE",
              'postalCode' : "SW1A 2AA",   
              'meterName' : "DM90"
           };

实际上,我需要序列化嵌套的
地址
对象并将其合并为一个。由于每个对象的结构都是相同的,所以我考虑使用一个for-each循环,它可以将地址值合并为一个。

您可以使用如下内容:

var old = {
    account: "100000",
    address: {
        city: "LONDON",
        companyName: "Test IQUE",
        country: "UK",
        postalCode: "SW1A 2AA",
    },
    meterName: "DM9"
};


let flattenObject = (obj) => {
    let flat = {};
    for (const [key, value] of Object.entries(obj)) {
      if (typeof value === 'object' && value !== null) {
        for (const [subkey, subvalue] of Object.entries(value)) {
          typeof flat[subkey] === 'undefined' ?
            flat[subkey] = subvalue :
            Array.isArray(flat[subkey]) ?
              flat[subkey].push(subvalue) :
              flat[subkey] = [flat[subkey], subvalue]
        }
      } else {
        flat = {...flat, ...{[key]: value}};
      }
    }
    return flat;
  }

var flatted = flattenObject(old);

console.log(flatted);

如果您询问如何从addresss对象获取完整地址字符串,可以使用以下代码:

“地址”:Object.values($scope.userDetails.address).join(',')

Object.values()
函数将把
地址
对象更改为数组

.join
方法将把这个数组中的所有元素连接成一个字符串。这些元素将由作为参数传递的字符串分隔(
,在本例中)。

您可以使用lodash库:

@看

_.assign(对象[源])

_.与(对象、其他、定制者)合并


您是否询问如何将
{city:“…”,country:“…”,…}
转换为字符串…?看起来您正在使用
angularjs
,但您正在标记javascript。angularjs用于向对象添加数据/创建新的展平对象。但是我的问题是关于JavaScription,你有嵌套属性的例子吗?请同时添加想要的结果。@NinaScholz编辑了我的问题以消除歧义
function Foo() {
    this.a = 1;
}

function Bar() {
    this.c = 3;
}

Foo.prototype.b = 2;
Bar.prototype.d = 4;

_.assign({ 'a': 0 }, new Foo, new Bar);
// => { 'a': 1, 'c': 3 }
function customizer(objValue, srcValue) {
    if (_.isArray(objValue)) {
        return objValue.concat(srcValue);
    }
}
 
var object = { 'a': [1], 'b': [2] };
var other = { 'a': [3], 'b': [4] };
 
_.mergeWith(object, other, customizer);
// => { 'a': [1, 3], 'b': [2, 4] }