根据对象的子项重新创建数组
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)
前段时间我问了一个关于如何根据键过滤数组的问题,今天这个函数,但我正在做一个新的实现。
但是我正在重构我如何处理字段值,因为在我只需要第一个对象及其值之前 [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)