JAVASCRIPT - Получить значение из родительского массива объектов внутри дочернего объекта после выравнивания массива - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть массив объектов, который имеет некоторые значения. Примеры:

bigArray: [
  {
   greatName: 'Name String - #1',
   array: [{
     id: 1,
     name: 'string name - #1'
   }]
  },
  {
   greatName: 'Name String - #2',
   array: [{
     id: 2,
     name: 'string name - #2'
   }]
  },
  {
   greatName: 'Name String - #3',
   array: [{
     id: 3,
     name: 'string name - #3'
   }]
  }
]

Я использовал следующие составные функции из ramda, чтобы получить все значения свойств массивов array и объединить их в один массив:

  const extractRB = compose(
    flatten,
    map(props(['array']))
  );

, что дало мне обратно следующий массив:

// Flatten Array:
flatten: [
  {
     id: 1,
     name: 'string name - #1'
   },
   {
     id: 2,
     name: 'string name - #2'
   },
   {
     id: 3,
     name: 'string name - #3'
   }
]

Теперь это требование для моей функции. ПРОБЛЕМА: мне также нужно greatName, значение свойства внутри каждого объекта, чтобы отобразить их. Но я не могу найти способ на самом деле получить правильные значения внутри объекта ..

Чего я хочу добиться, так это массива объектов. Keep in mind that I can have dozens of Objects in Big Array, and hundrends of Objects inside each child array:

// Flatten Array:
flatten: [
  {
     id: 1,
     name: 'string name - #1'
     greatName: 'Name String - #1',
   },
   {
     id: 2,
     name: 'string name - #2',
     greatName: 'Name String - #2',
   },
   {
     id: 3,
     name: 'string name - #3',
     greatName: 'Name String - #3',
   }
]

Я сделал это, расширяя исходный объект из массива сглаживания и добавляя к нему свойство greatName, но вычисляя, какое значение является правильным для каждого объекта. Нет общего значения между объектом и массивом для условия:

flatten.map(flatObj =>  {...flatObj, greatName: bigArray.map(// what operation can I do here, to get the correct value for each object inside the `bigArray` )});

Я пробовал довольно много условных операций, но они всегда будут возвращать false. Майн есть способ сделать это с длиной каждого array, но не уверен, как это сделать.

Помощь будет принята с благодарностью .. !! Спасибо !!

Ответы [ 2 ]

3 голосов
/ 03 февраля 2020

var bigArray= [
    {
     greatName: 'Name String - #1',
     array: [{
       id: 1,
       name: 'string name - #1'
     }]
    },
    {
     greatName: 'Name String - #2',
     array: [{
       id: 2,
       name: 'string name - #2'
     }]
    },
    {
     greatName: 'Name String - #3',
     array: [{
       id: 3,
       name: 'string name - #3'
     }]
    }
  ]


  console.log(bigArray.flatMap(({greatName, array}) => array.flatMap(x => ({greatName, ...x}))))

Если свойство array всегда имеет только 1 элемент, то вы можете написать его короче:

  bigArray.map(({greatName, array}) => ({greatName, ...array[0]}))
0 голосов
/ 03 февраля 2020

Можете ли вы попробовать это один раз, может быть, это решит вашу проблему:

bigArray.forEach((item)=>{
item.array.greatName  = item.greatName;
delete item.greatName;
})

Просто консоль bigArray и не используйте это, а просто попробуйте с помощью вышеуказанного метода

 const extractRB = compose(
    flatten,
    map(props(['array']))
  );
...