javascript - 协助展平包含一个对象(或可能超过 1 个)的对象数组

标签 javascript json object

我正在尝试展平对象数组,这些对象在该对象中有一个对象(但也可以有更多)。生成的格式应该只是一个对象数组。

目前是这样的:

var array = [
  {
    nickname: "Johnny",
    first_name: "John",
    last_name: "Smith",
    info: {
      married: "yes",
      kids_ages: []
    }
  },
  {
    {
    nickname: "Ron",
    first_name: "Ronald",
    last_name: "Smith",
    info: {
      married: "no",
      kids_ages: []
    }
  },
  {
    nickname: "Johnny",
    first_name: "John",
    last_name: "Smith",
    info: {
      married: "yes",
      kids_ages: [17]
    },
    kids: {
      first_name: "Harry",
      last_name: "Smith
  }
 }
]

第一个条目应该是这样的:

{
  nickname: "Johnny",
  first_name: "John",
  last_name: "Smith",
  married: "yes"
  kids_ages: []
},

最佳答案

您可以从对象中获取 info 并将此对象与其余对象一起分配给单个对象。

var array = [{ nickname: "Johnny", first_name: "John", last_name: "Smith", info: { married: "yes", kids_ages: [] } }, { nickname: "Ron", first_name: "Ronald", last_name: "Smith", info: { married: "no", kids_ages: [] } }, { nickname: "Johnny", first_name: "John", last_name: "Smith", info: { married: "yes", kids_ages: [17] }, kids: { first_name: "Harry", last_name: "Smith" } }],
    flat = array.map(({ info, ...object }) => ({ ...object, ...info }));

console.log(flat);
.as-console-wrapper { max-height: 100% !important; top: 0; }

另一种方法是将外部对象的键作为前缀。

function getFlat(object, parent) {
    return Object.assign({}, ...Object.entries(object).map(([k, v]) => {
        if (v && typeof v === 'object' && !Array.isArray(v)) {
            return getFlat(v, k);
        }
        return { [parent  + (parent && '_') + k]: v };
    }));
}

var array = [{ nickname: "Johnny", first_name: "John", last_name: "Smith", info: { married: "yes", kids_ages: [] } }, { nickname: "Ron", first_name: "Ronald", last_name: "Smith", info: { married: "no", kids_ages: [] } }, { nickname: "Johnny", first_name: "John", last_name: "Smith", info: { married: "yes", kids_ages: [17] }, kids: { first_name: "Harry", last_name: "Smith" } }],
    flat = array.map(o => getFlat(o));

console.log(flat);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 协助展平包含一个对象(或可能超过 1 个)的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55852437/

相关文章:

javascript - javascript 对象的循环属性

javascript - firestore 检查 id 是否存在于 id 数组中

javascript - 我的 jQuery 函数的范围?

json - Swift json 解码丢失 json 对象键顺序

java - JAVA中HttpClient请求的编码类型

javascript - Angular 地理编码结果不同步

javascript - javascript 中 JSON 的默认值

JavaScript:对象(变量)是什么?

java - 将类的实例添加到数组列表

java - java中的静态概念