ES6:如何解散内部数组并展平JSON数组? [英] ES6: How do I unravel inner arrays and flatten the JSON array?

查看:75
本文介绍了ES6:如何解散内部数组并展平JSON数组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

想象一下,我有以下JSON数组:

Imagine that I have the following JSON array:

[
  {
    "team": "Colts",
    "players": [
      {
        "name": "Andrew Luck",
        "position": "quarterback"
      },
      {
        "name": "Quenton Nelson",
        "position": "guard"
      }
    ]
  },
  {
    "team": "Patriots",
    "players": [
      {
        "name": "Tom Brady",
        "position": "quarterback"
      },
      {
        "name": "Shaq Mason",
        "position": "guard"
      }
    ]
  }
]

我想将JSON转换为以下形式:

And I want to transform and flatten the JSON to be the following:

[
  {
    "name": "Andrew Luck",
    "position": "quarterback",
    "team": "Colts"
  },
  {
    "name": "Quenton Nelson",
    "position": "guard",
    "team": "Colts"
  },
  {
    "name": "Tom Brady",
    "position": "quarterback",
    "team": "Patriots"
  },
  {
    "name": "Shaq Mason",
    "position": "guard",
    "team": "Patriots"
  }
]

我该如何使用ES6或lodash语法做到这一点?

How would I do this with either ES6 or lodash syntax?

推荐答案

使用

Use Array#reduce method along with Array#map method.

let res = data.reduce((arr, { team, players }) => arr.concat(players.map( obj => ({...obj, team }))), []);

// or
let res = data.reduce((arr, { team, players }) => [...arr, ...players.map( obj => ({...obj, team }))], []);

// or
let res = data.reduce((arr, { team, players }) => (arr.push(...players.map( obj => ({...obj, team }))),arr), []);

var data = [{
    "team": "Colts",
    "players": [{
        "name": "Andrew Luck",
        "position": "quarterback"
      },
      {
        "name": "Quenton Nelson",
        "position": "guard"
      }
    ]
  },
  {
    "team": "Patriots",
    "players": [{
        "name": "Tom Brady",
        "position": "quarterback"
      },
      {
        "name": "Shaq Mason",
        "position": "guard"
      }
    ]
  }
]

let res = data.reduce((arr, {
  team,
  players
}) => arr.concat(players.map(obj => ({ ...obj,
  team
}))), []);


// or
let res1 = data.reduce((arr, {
  team,
  players
}) => [...arr, ...players.map(obj => ({ ...obj,
  team
}))], []);

// or
let res2 = data.reduce((arr, {
  team,
  players
}) => (arr.push(...players.map(obj => ({ ...obj,
  team
}))), arr), []);


console.log(res, res1, res2)

这篇关于ES6:如何解散内部数组并展平JSON数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆