loda sh выравнивает внутренний массив (часть объекта) и генерирует как можно больше объектов на основе длины массива - PullRequest
1 голос
/ 28 февраля 2020

У меня есть следующий массив объектов. Я хочу сгенерировать как можно больше объектов на основе длины внутреннего массива Y.

var arr = [{x:1,y:[1,2]},{x:2,y:[1,2]}];

Ожидаемый результат:

var arr = [{x:1,y:1},{x:1,y:2},{x:2,y:1},{x:2,y:2}]

Код, который я пробовал, но не смог

arr.forEach(item => {
  return item.y.forEach(inner => {
    return inner;
  })
})

1 Ответ

4 голосов
/ 28 февраля 2020

Вы можете использовать flatMap() с вложенным map(). Используйте flatMap() для основного массива и внутри него, используйте map() для y свойства этого объекта. return объект из внутренней map() функции, у которой свойство y будет другим и x будет таким же

var arr = [{x:1,y:[1,2]},{x:2,y:[1,2]}];
const res = arr.flatMap(({x, y}) => y.map(y => ({x, y})));
console.log(res)

Если вы не понимаете, flatMap ниже - это версия с использованием вложенного forEach

var arr = [{x:1,y:[1,2]},{x:2,y:[1,2]}];
const res = [];
arr.forEach(a => {
  a.y.forEach(y => {
    res.push({x: a.x, y});
  })
})
console.log(res)
...