Chupachar
@Chupachar
front-end dev

Как создать массив объектов с определенными свойствами на основе другого массива объектов?

Есть массив с каютами:

const cabins = [{
    adult: 1, // выбран 1 взрослый
    teenager: 1, // выбран 1 подросток
    babe: 1 // выбран 1 ребенок
  },
  {
    adult: 2, // выбрано 2 взрослых
    teenager: 0,
    babe: 1 // выбран 1 ребенок
  }
]

В котором было выбрано условно 2 каюты с пассажирами, при создании данного массива так же должен отдельно создаться еще один массив passengers = [] в котором будут присутствовать объекты (1 пассажир === 1 объект) с свойством WithSeat: 1 или WithSeat: 0 в зависимости от информации с backend который я получаю ниже:

const obj = {
  result: "1",
  types: [{
      ID: 1,
      Text: "Взрослый",
      WithSeat: 1 //с местом
    },
    {
      ID: 2,
      Text: "Подросток",
      WithSeat: 1 //с местом
    },
    {
      ID: 3,
      Text: "Ребенок",
      WithSeat: 0 //без места
    }
  ]
}

Вытаскиваю примерно так нужные мне WithSeat из объектов и присваиваю в переменные для дальнейшей работы:

const adultSixteenWithSeat = result.types[0]["WithSeat"]; // === 1
const childTwelveToSixteenWithSeat = result.types[1]["WithSeat"]; // === 1
const childUpToOneWithSeat = result.types[2]["WithSeat"]; // === 0

В конечном итоге я должен получить вот такую структуру массива объектов пассажиров:

const passengers = [{
    WithSeat: 1, // adult
  },
  {
    WithSeat: 1, // teenager
  },
  {
    WithSeat: 0, // babe
  },
  {
    WithSeat: 1, // adult
  },
  {
    WithSeat: 1, // adult
  },
  {
    WithSeat: 0, // babe
  },
]

По принципу работы это счетчик в котором выбирается количество пассажиров и формируется массив cabins, приблизительный наглядный пример:
https://jsfiddle.net/xfh2csby/1/
  • Вопрос задан
  • 205 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
// значения withSeat вместо раскладывания в отдельные переменные собираете в объект
const withSeat = {
  adult: 1,
  teenager: 1,
  babe: 0,
};


const passengers = cabins.flatMap(n => Object
  .entries(n)
  .flatMap(([ k, v ]) => Array.from(
    { length: v },
    () => ({ withSeat: withSeat[k] })
  ))
);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы