【问题标题】:Convert an array of Objects with nested Objects into simple array of Objects?将具有嵌套对象的对象数组转换为简单的对象数组?
【发布时间】:2020-05-03 10:47:22
【问题描述】:

我给了一个嵌套对象数组,我想将它转换成一个简单的对象数组,我不知道如何解决这个问题,谁能给我一个解决这个问题的方法。我试过但是我自己无法解决或者我没有找到类似的东西

const data = [
  {
    attachment: {
      Name: {type: string, value: 'Amar'},
      'Second Contact': {type: 'phoneNumber', value: '+91123587900'},
      'First Contact': {type: 'phoneNumber', value: '+911234567890'},
      'Registered Office Address': {
        value: 'New Delhi',
        type: 'string',
      },
      'Company Logo': {type: 'string', value: ''},
      'Youtube ID': {type: 'string', value: ''},
    },
    creator: {
      displayName: 'xyz',
      phoneNumber: '+915453553554',
      photoURL:
        'https://www.google.com/url?sa=i&source=images&cd=&ved=2ahUKEwixw9uJrYjnAhWOe30KHa42AFwQjRx6BAgBEAQ&url=https%3A%2F%2Funsplash.com%2Fs%2Fphotos%2Fpic&psig=AOvVaw24C_LUOadGZAi3r2JtZe9b&ust=1579272070036146',
    },
  },
  {
    attachment: {
      Name: {type: string, value: 'hari'},
      'Second Contact': {type: 'phoneNumber', value: '+91153587900'},
      'First Contact': {type: 'phoneNumber', value: '+911264567890'},
      'Registered Office Address': {
        value: 'New Delhi mv',
        type: 'string',
      },
      'Company Logo': {type: 'string', value: ''},
      'Youtube ID': {type: 'string', value: ''},
    },
    creator: {
      displayName: 'xyz',
      phoneNumber: '+915453543554',
      photoURL:
        'https://www.google.com/url?sa=i&source=images&cd=&ved=2ahUKEwixw9uJrYjnAhWOe30KHa42AFwQjRx6BAgBEAQ&url=https%3A%2F%2Funsplash.com%2Fs%2Fphotos%2Fpic&psig=AOvVaw24C_LUOadGZAi3r2JtZe9b&ust=1579272070036146',
    },
  },
];

预期的输出是这样的

[
    {
        Name:'Amar',
        'Second Contact':+91123587900,
        'First Contact':+911234567890,
        'Registered Office Address':'New Delhi',
        displayName:'xyz',
        phoneNumber:'+915453553554'   
    },
    {
        Name:'hari',
        'Second Contact':+91153587900,
        'First Contact':+911264567890,
        'Registered Office Address':'New Delhi mv',
        displayName:'xyz',
        phoneNumber:'+915453543554'     
    }
]

【问题讨论】:

  • 它只是一个特定的案例还是你想要通用的方式来做到这一点?
  • @miyavmiyav 以通用方式进行操作
  • 请先发布您的解决方案。你试图解决这个问题的方法

标签: javascript arrays javascript-objects nested-object


【解决方案1】:

假设您需要获得一些属性。你可以简单地使用map。如果您需要一个适用于所有属性的解决方案,我可能会使用object.keys 进行迭代。

我在这里添加了两种解决方案

const data = [
  {
    "attachment": {
      "Name": {"type": "string", "value": "Amar"},
      "Second Contact": {"type": "phoneNumber", "value": "+91123587900"},
      "First Contact": {"type": "phoneNumber", "value": "+911234567890"},
      "Registered Office Address": {
        "value": "New Delhi",
        "type": "string"
      },
      "Company Logo": {"type": "string", "value": ""},
      "Youtube ID": {"type": "string", "value": ""}
    },
    "creator": {
      "displayName": "xyz",
      "phoneNumber": "+915453553554",
      "photoURL":
        "https://www.google.com/url?sa=i&source=images&cd=&ved=2ahUKEwixw9uJrYjnAhWOe30KHa42AFwQjRx6BAgBEAQ&url=https%3A%2F%2Funsplash.com%2Fs%2Fphotos%2Fpic&psig=AOvVaw24C_LUOadGZAi3r2JtZe9b&ust=1579272070036146"
    }
  },
  {
    "attachment": {
      "Name": {"type": "string", "value": "hari"},
      "Second Contact": {"type": "phoneNumber", "value": "+91153587900"},
      "First Contact": {"type": "phoneNumber", "value": "+911264567890"},
      "Registered Office Address": {
        "value": "New Delhi mv",
        "type": "string"
      },
      "Company Logo": {"type": "string", "value": ""},
      "Youtube ID": {"type": "string", "value": ""}
    },
    "creator": {
      "displayName": "xyz",
      "phoneNumber": "+915453543554",
      "photoURL":
        "https://www.google.com/url?sa=i&source=images&cd=&ved=2ahUKEwixw9uJrYjnAhWOe30KHa42AFwQjRx6BAgBEAQ&url=https%3A%2F%2Funsplash.com%2Fs%2Fphotos%2Fpic&psig=AOvVaw24C_LUOadGZAi3r2JtZe9b&ust=1579272070036146"
    }
  }
];

const result = data.map(item => {
  return {
    "Name": item.attachment.Name.value,
    "Second Contact": item.attachment["Second Contact"].value
  };
});

console.log(JSON.stringify(result));


// Another generic way
const result2 = data.map(item => {
  const singleObj = {};
  Object.keys(item.attachment).forEach(key => {
singleObj[key] = item.attachment[key].value;
  });
  return singleObj;
});

console.log(JSON.stringify(result2));

【讨论】:

    【解决方案2】:

    Preety 确定如果您对 javascript 有所了解,那么它应该很容易解决。唯一棘手的部分可能是带有“第二次联系”之类的空格的字段。

    解决这个特殊情况的方法如下:

    const output = data.map(item => {
        return {
            name: item.attachment.Name.value,
            'Second Contact': item.attachment['Second Contact'].value,
            'First Contact': item.attachment['First Contact'].value,
            'Registered Office Address':item.attachment['Registered Office Address'].value,
            displayName: item.creator.displayName,
            phoneNumber: item.creator.phoneNumber 
        };
    })
    
    console.log(output);
    

    小提琴https://jsfiddle.net/chgnu1d5/

    【讨论】: