首页 > 解决方案 > JAVASCRIPT - 在数组展平后从子对象内部的父对象数组中获取值

问题描述

我有一个对象数组,它有一些值。例子:

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 中的以下组合函数,以获取所有 Arraysarray属性值并将它们展平为单个数组:

  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但不知道该怎么做。

帮助将不胜感激..!! 谢谢!!

标签: javascriptarraysramda.jsflatten

解决方案


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]}))

推荐阅读