繁体   English   中英

帮助展平具有对象(或可能大于 1)的对象数组

[英]Assistance flattening an array of objects that has an object (or potential more than 1) within

我正在尝试展平一个对象数组,该对象数组在该对象中包含一个对象(但也可以包含更多对象)。 结果格式应该只是一个对象数组。

这是目前的情况:

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

从我的评论:尝试array.prototype.map然后在每个对象array.prototype.reduce 想想冲突。 当你在孩子对象和父对象中有first_name时,在最后一个对象中做什么。 你想保留两个,最后一个,第一个,一些随机的?

例如:

const flat = arr => arr.map(element => 
  Object.entries(element).reduce((sum, [key, value]) => { 
    if (isObject(value)) {
      return {...sum, ...value}
      // or anything else to manage conflicts, depends on the way you want to handle it
    } 
  return {...sum, [key]: value }
}, {}))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM