JavaScript中数组的析构对象



嗨,伙计们,我有一个对象数组,我想销毁它。下面是该数组的节选:

[
{
"Area": "Werk Produktivität [%] - Target",
"Jan": 86.21397507374327,
"Feb": 86.0570021973368,
"Mrz": 88.70898346258058,
"Apr": 85.29801908413164,
"May": 85.07431241640211
},
{
"Area": "Werk Produktivität [%] - Actual",
"Jan": 84.17054711398421,
"Feb": 83.80826026601528,
"Mrz": 84.11553769971036,
"Apr": 83.76460916731,
"May": 82.69773876702813
}
]

我现在试图实现的是将数组分成以下内容:

[
{
"Area": "Werk Produktivität [%] - Target",
"Jan": 86.21397507374327,
},
{
"Area": "Werk Produktivität [%] - Target",
"Feb": 86.0570021973368,

},
{
"Area": "Werk Produktivität [%] - Target",
"Mrz": 88.70898346258058,
},
{
"Area": "Werk Produktivität [%] - Target",
"Apr": 85.29801908413164,
},
{
"Area": "Werk Produktivität [%] - Target",
"May": 85.07431241640211,
},
{
"Area": "Werk Produktivität [%] - Actual",
"Jan": 84.17054711398421,
},
{
"Area": "Werk Produktivität [%] - Actual",
"Feb": 83.80826026601528,
},
{
"Area": "Werk Produktivität [%] - Actual",
"Mrz": 84.11553769971036,
},
{
"Area": "Werk Produktivität [%] - Actual",
"Apr": 83.76460916731,
},
{
"Area": "Werk Produktivität [%] - Actual",
"May": 82.69773876702813
}

我正在考虑以以下方式使用...rest参数,但我只得到数组的最后5项。请注意,上面的obj是数组对象的摘录。

const fn = ({ Area, ...rest }) =>
Object.values(rest)
.map(Month => ({
Area,
Month
}))


})
const result = fn(obj)

您可以使用reduceObject.entries获得相同的结果:

const data = [
{
"Area": "Werk Produktivität [%] - Target",
"Jan": 86.21397507374327,
"Feb": 86.0570021973368,
"Mrz": 88.70898346258058,
"Apr": 85.29801908413164,
"May": 85.07431241640211
},
{
"Area": "Werk Produktivität [%] - Actual",
"Jan": 84.17054711398421,
"Feb": 83.80826026601528,
"Mrz": 84.11553769971036,
"Apr": 83.76460916731,
"May": 82.69773876702813
}
]
const result  = data.reduce((res, {Area, ...rest}) => {
Object.entries(rest).forEach(([key, value]) => res.push({Area, [key]: value}))
return res
}, [])
console.log(result)

您可以使用Array.prototype.reduce函数及其内部的Array.prototype.map函数来构建所需的对象。

const arr = [  {    "Area": "Werk Produktivität [%] - Target",    "Jan": 86.21397507374327,    "Feb": 86.0570021973368,    "Mrz": 88.70898346258058,    "Apr": 85.29801908413164,    "May": 85.07431241640211  },  {    "Area": "Werk Produktivität [%] - Actual",    "Jan": 84.17054711398421,    "Feb": 83.80826026601528,    "Mrz": 84.11553769971036,    "Apr": 83.76460916731,    "May": 82.69773876702813  }];
const result = arr.reduce((a, {Area, ...months}) => {
return [...a, ...Object.entries(months).map(([month, value]) => ({Area, [month]: value}))];
}, []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

不确定result = fn(obj)中的obj在这里做什么。我认为您正在调用数组上的map并在生成的2D数组中获得第一项。你只需要在数组上调用flatMap,fn作为回调。

const output = inputArray.flatMap(fn)

const output = inputArray.map(fn).flat()

fn也需要稍微调整一下。您需要获得整个rest对象,因为您还需要该对象的键

Object.entries(rest)
.map(([key, value]) => ({ Area, [key]: value }))

const input = [
{
"Area": "Werk Produktivität [%] - Target",
"Jan": 86.21397507374327,
"Feb": 86.0570021973368,
"Mrz": 88.70898346258058,
"Apr": 85.29801908413164,
"May": 85.07431241640211
},
{
"Area": "Werk Produktivität [%] - Actual",
"Jan": 84.17054711398421,
"Feb": 83.80826026601528,
"Mrz": 84.11553769971036,
"Apr": 83.76460916731,
"May": 82.69773876702813
}
]
const fn = ({ Area, ...rest }) =>
Object.entries(rest)
.map(([key,value]) => ({
Area,
[key]: value
}))
const output = input.flatMap(fn)
console.log(output)

const ary = [
{
"Area": "Werk Produktivität [%] - Target",
"Jan": 86.21397507374327,
"Feb": 86.0570021973368,
"Mrz": 88.70898346258058,
"Apr": 85.29801908413164,
"May": 85.07431241640211
},
{
"Area": "Werk Produktivität [%] - Actual",
"Jan": 84.17054711398421,
"Feb": 83.80826026601528,
"Mrz": 84.11553769971036,
"Apr": 83.76460916731,
"May": 82.69773876702813
}
];
const newAry = [];
for(item of ary){
const {
Area,
...months
}=item;
for([k,v] of Object.entries(months)){
newAry.push({Area,[k]:v});

}
}
console.log(newAry);

希望这对你有帮助!!

您可以简单地通过使用Destructuring assignment来实现。

<<p>演示strong>:

const arr = [
{
"Area": "Werk Produktivität [%] - Target",
"Jan": 86.21397507374327,
"Feb": 86.0570021973368,
"Mrz": 88.70898346258058,
"Apr": 85.29801908413164,
"May": 85.07431241640211
},
{
"Area": "Werk Produktivität [%] - Actual",
"Jan": 84.17054711398421,
"Feb": 83.80826026601528,
"Mrz": 84.11553769971036,
"Apr": 83.76460916731,
"May": 82.69773876702813
}
];
const res = [];
arr.forEach(obj => {
const {Area, ...remaining} = obj;
Object.keys(remaining).forEach(month => {
res.push({ Area, [month]: remaining[month] })
})
})
console.log(res);

最新更新