如何将数组中的一个对象拆分为多个对象



我有一个类似so的对象数组,其中,在名称中,fixedValue是固定的,category和total也固定在内部fixedValue数组中的每个对象中。然而;Col 2"Col 3";,等等可以是随机值,并且可以有多个随机值。因此,除了类别或总数之外的所有其他关键字都可以被命名为"关键字";FERFVCEEF erfe";或任何随机词:

originalDataSet = [
{
"fixedValue": [
{
"category": "SD",
"total": 2,
"Col 2": 208,
"Col 3": 88,
"Col 4": 4,
....
},
{
"category": "EFG",
"total": 1,
"Col 2": 106,
"Col 3": 46,
"Col 4": 4,
....
},
{
"category": "ERG",
"total": 1,
"Col 2": 107,
"Col 3": 47,
"Col 4": 5,
....
},
....
]
}
]

我的目标是将其转换为以下内容:

newDataSet = [{
fixedValue: [
{
name: "SD",
fixedValue: [
{ name: "Col 2", value: 208 },
{ name: "Col 3", value: 88 },
{ name: "Col 4", value: 4 },
...
]
},
{
name: "EFG",
fixedValue: [
{ name: "Col 2", value: 106 },
{ name: "Col 3", value: 46 },
{ name: "Col 4", value: 4 },
...
]
},
{
name: "ERG",
fixedValue: [
{ name: "Col 2", value: 107 },
{ name: "Col 3", value: 47 },
{ name: "Col 4", value: 5 },
...
]
},
....
]}
]

每个";类别";值,并使其成为名为"的新键的值;name";,其中键和键值不是"0";类别";或";合计";被分配给新的密钥。

到目前为止,我有这样的事情,但我觉得它朝着错误的方向发展:

// First work with the array in originalDataSet.fixedValue
const newObj = {};
// For each object in the fixedValue array
for (const key of originalDataSet.fixedValue) {
// If the key does not equal to 'category' or 'total' e.g., in this example we're referring to 'Col 2', 'Col 3', and 'Col 4', though there could be more.
if(!key['category'] && !key['total'])
// Should yield something like this: { name: "Col 2", value: 107 }
newObj['name']  = key;
newObj['value'] = newObj[key];
}
}
originalDataSet.fixedValue.foreach(
newDataSet = [{
fixedValue: [
name: item.category
fixedValue: [newObj]
]
}]
}

我将如何实现新的数据集?

您可以使用析构函数将categorytotal属性与其余对象隔离开来,然后在该其余对象上使用Object.entries将这些键/值对映射到小的{name, value}对象:

const convert = arr => arr.map(({fixedValue}) => ({ 
fixedValue: fixedValue.map(({category, total, ...rest}) => ({
name: category,
fixedValue: Object.entries(rest).map(([name, value]) => ({ name, value }))
}))
}));
const originalDataSet = [{"fixedValue": [{"category": "SD","total": 2,"Col 2": 208,"Col 3": 88,"Col 4": 4,}, {"category": "EFG","total": 1,"Col 2": 106,"Col 3": 46,"Col 4": 4,}, {"category": "ERG","total": 1,"Col 2": 107,"Col 3": 47,"Col 4": 5,}]}]
console.log(convert(originalDataSet))

此数据看起来像JSON,您可以通过以下方法轻松转换:

const originalDataSet = {
"fixedValue": [{
"category": "SD",
"total": 2,
"Col 2": 208,
"Col 3": 88,
"Col 4": 4
},
{
"category": "EFG",
"total": 1,
"Col 2": 106,
"Col 3": 46,
"Col 4": 4
},
{
"category": "ERG",
"total": 1,
"Col 2": 107,
"Col 3": 47,
"Col 4": 5
}
]
}
const obj = JSON.stringify(originalDataSet);
const obj1 = JSON.parse(obj)
const newObj = obj1.fixedValue.map(el => {
const newObject={
name:el.category,
fixedValue:[]
}
newObject.fixedValue.push({name:"Col 2", value:el["Col 2"]})
newObject.fixedValue.push({name:"Col 3", value:el["Col 3"]})
newObject.fixedValue.push({name:"Col 4", value:el["Col 4"]})
return newObject
}) 

使用循环改进代码是可能的

最新更新