合并并序列化javascript对象

时间:2020-10-15 08:58:18

标签: javascript angularjs

我想合并嵌套的javascript对象。当对象的长度为1时,我很简单。但是,由于长度增加了,我需要一种动态的方法来合并address键并序列化我的对象

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

长度为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"
           };

通常,我需要序列化嵌套的address对象并将其合并为一个对象。由于每个对象的结构都是相同的,所以我一直在考虑对每个循环使用a,它可以将address的值组合为一个。

3 个答案:

答案 0 :(得分:1)

您可以使用类似这样的内容:

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);

答案 1 :(得分:0)

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

'address': Object.values($scope.userDetails.address).join(', ');

Object.values()函数会将您的address对象更改为数组。

.join方法会将来自此数组的所有元素连接到一个字符串中。这些元素将由作为参数传递的字符串分隔(在这种情况下为,

答案 2 :(得分:0)

您可以使用lodash lib:https://lodash.com/docs/4.17.15#assignIn

@see

_。assign(object,[sources])

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 }

_。mergeWith(对象,其他,定制器);

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] }
相关问题