Как бы вы изменили значения / добавили данные вложенных объектов в массив объектов, используя Javascript? - PullRequest
1 голос
/ 15 апреля 2020
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])
  });
});

Выше приведен пример, который я собрал, чтобы лучше всего продемонстрировать свой вопрос. У меня возникают проблемы с пониманием того, почему вложенное отображение (.map ()) массивов объектов не позволяет мне изменять вложенные данные. Когда я поддерживаю результаты журнала, я получаю либо «[undefined, undefined]», либо неизмененный массив «people».

Я хотел бы вернуть тот же массив, что и «people», за исключением замены вложенных «beers» "array (people.teams.beers []) с соответствующими объектами из массива" beers ". Пример успешного результата ниже:

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

1 Ответ

1 голос
/ 15 апреля 2020

Array.map ожидает функцию, которая принимает один элемент массива в качестве параметра и возвращает сопоставленное значение. В вашем случае вы не возвращаете никакого значения из функций отображения, поэтому вы получаете неопределенное значение дважды

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);
...