根据对象的子项重新创建数组

Recreate array on basis of object's child

前段时间我问了一个关于如何根据键过滤数组的问题,今天这个函数,但我正在做一个新的实现。

但是我正在重构我如何处理字段值,因为在我只需要第一个对象及其值之前 [0].value 现在我需要扩展这个逻辑以使用数组我将离开下面是一些示例。

我目前正在使用的代码 https://codesandbox.io/s/lodash-tester-forked-fcdmy1?file=/index.js

来自 API 的原始未过滤数据:

[
  {
    "_id" : ObjectId("62548802054c225fe560f41a"),
    "test" : [ 
      "taetea", 
      "atty", 
    ],
    "Peso" : [ 
      {
        "_id" : "624f2ab363dd92f2101de167",
        "value" : "255"
      }
    ],
  }
]

table 数据的预期结果:

[
  {
    "_id" : "62548802054c225fe560f41a",
    "test1":"taetea",
    "test2":"atty",
    "Peso":"255"
  },
  {
  ...
  },
]

任何能提供帮助的人我都感激不尽我会用rep+和我永远的感谢来回报xD

据我了解,您想使用 table 列中的标题 属性 并在 API data.If 中搜索它,标题 属性 代表一个字符串数组,然后添加所有字符串,否则添加值 属性.

const apiData =  [
  {
    "_id" : "62548802054c225fe560f41a",
    "test" : [ 
      "taetea", 
      "atty", 
    ],
    "Peso" : [ 
      {
        "_id" : "624f2ab363dd92f2101de167",
        "value" : "255"
      }
    ],
  }
];

const tableData = [
  {
    title: "Peso",
    dataIndex: "peso",
    key: "peso",
  },
  {
    title: "test",
    children: [
      {
        title: "ex: ${title} field ${title.length}",
        dataIndex: "ex: ${title} + ${title.length}",
        key: "ex: ${title} + ${title.length}",
      },
      {
        title: "ex: ${title} field ${title.length}",
        dataIndex: "ex: ${title} + ${title.length}",
        key: "ex: ${title} + ${title.length}",
      },
    ],
  },
];

const tableKeys = tableData.map(t => t.title)
const output = []
apiData.forEach(obj => {
const data = []
 Object.keys(obj).filter(key =>  tableKeys.includes(key)).forEach(key =>{
   if(typeof obj[key][0]=== 'string'){
      data.push(...obj[key].map((val,index) => ({[`${key}${index+1}`]:val})))
  }else{
      data.push({[key]: obj[key][0].value})
  }
  
 })
 // Add the id of the the api data & spread the objects collected
 output.push({'_id':obj._id,
              ...data.reduce((map,elem)=>({...map,...elem}),
                             {})})
})
console.log('output',output)