繁体   English   中英

您将如何使用 Javascript 更改值/添加到对象数组内的嵌套 object 数据?

[英]How would you change values/add to nested object data inside array of objects using Javascript?

const beers = [
  {
    id: '100',
    name: 'stoneys'
  },
  {
    id: '200',
    name: 'budweiser'
  },

  {
    id: '300',
    name: 'miller'
  },

  {
    id: '400',
    name: 'corona'
  }
];

const people = [
  {
    name: 'steve',
    teams: [
      {
        name: 'pirates',
        beers: ['100']
      },
      {
        name: 'penguins',
        beers: ['300']
      }
    ]
  },
  {
    name: 'jim',
    teams: [
      {
        name: 'indians',
        beers: ['200']
      },
      {
        name: 'blue jackets',
        beers: ['100', '400']
      }
    ]
  }
];

let newPeople = people.map(fan => {
  fan.teams.map(team => {
    team.beers.map(beer => beers.filter(brand => brand.id === beer)[0])
  });
});

以上是我整理的一个示例,以最好地展示我的问题。 我无法理解为什么 object arrays 的嵌套映射 (.map()) 不允许我更改嵌套数据。 当我控制台日志结果时,我得到一个“[未定义,未定义]”或未更改的“人”数组。

我想返回与“人”相同的数组,除了用“啤酒”数组中的相应对象替换嵌套的“啤酒”数组(people.teams.beers [])。 下面的成功结果示例:

 {
    name: 'steve',
    teams: [
      {
        name: 'pirates',
        beers: [
          {
            id: '100',
            name: 'stoneys'
          }
        ]
      },
      {
        name: 'penguins',
        beers: [
          {
            id: '300',
            name: 'miller'
          }
        ]
      }
    ]
  }

Array.map需要一个 function ,它将单个数组元素作为参数并返回一个映射值。 在您的情况下,您没有从映射函数返回任何值,因此您两次未定义

 const beers = [ { id: '100', name: 'stoneys' }, { id: '200', name: 'budweiser' }, { id: '300', name: 'miller' }, { id: '400', name: 'corona' } ]; const people = [ { name: 'steve', teams: [ { name: 'pirates', beers: ['100'] }, { name: 'penguins', beers: ['300'] } ] }, { name: 'jim', teams: [ { name: 'indians', beers: ['200'] }, { name: 'blue jackets', beers: ['100', '400'] } ] } ]; let newPeople = people.map(fan => { let teams = fan.teams.map(team => { let beer = team.beers.map(beer => beers.filter(brand => brand.id === beer)[0]); return { name: team.name, beers: beer } }); return { name: fan.name, teams: teams } }); console.log(newPeople);

暂无
暂无

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

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