嗨,伙计们,我有一个对象数组,我想销毁它。下面是该数组的节选:
[
{
"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)
您可以使用reduce
和Object.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);