簡體   English   中英

JAVASCRIPT - 從對象的父對象數組中獲取值,在數組展平后的子對象中

[英]JAVASCRIPT - Get Value from Parent Array of Objects, inside the Child Object after Array Flattening

我有一個對象數組,它有一些值。 例子:

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 中的以下組合函數,以獲取所有 Arrays 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。 Mayne 有一種方法可以處理每個array的長度,但不知道該怎么做。

幫助將不勝感激.. !! 謝謝!!

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

你能試試這個嗎,也許這會解決你的問題:

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

只需控制台 bigArray,不要使用它,只需嘗試使用上述方法

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM