我有一個陣列 -
const a = [
{
value: 1,
week: 'week1',
},
{
value: 2,
week: 'week1',
},
{
value: 3,
week: 'week16',
},
{
value: 4,
week: 'week0',
},
{
value: 5,
week: 'week16',
},
]
我想通過以下方式修改陣列 -
let modified = [
{
value: 1.5,
week: 'week1',
},
{
value: 4,
week: 'week16',
},
{
value: 4,
week: 'week0',
},
]
在這個修改后的陣列中,重復的星期只被放置了一次,并且該值已被特定重復物件中的總值的平均值替換。
uj5u.com熱心網友回復:
您可以收集物件中的值,然后通過將它們的總和除以給定周的可用值數來計算平均值:
const a = [{
value: 1,
week: 'week1',
}, {
value: 2,
week: 'week1',
}, {
value: 3,
week: 'week16',
}, {
value: 4,
week: 'week0',
}, {
value: 5,
week: 'week16',
}];
const result = Object.entries(
a.reduce((a, {value, week}) => ({
...a,
[week]: [...a[week] || [], value]
}), {})
).map(([week, values]) => ({
week,
value: values.reduce((a, v) => a v, 0) / values.length
}));
console.log(result);
uj5u.com熱心網友回復:
你可以像下面這樣簡單地做到這一點,
1.創建地圖并添加相似周的值并保持其計數 2.然后創建修改。
const a = [
{
value: 1,
week: 'week1',
},
{
value: 2,
week: 'week1',
},
{
value: 3,
week: 'week16',
},
{
value: 4,
week: 'week0',
},
{
value: 5,
week: 'week16',
},
];
const helperMap = {}
a.forEach((obj) => {
if (!!helperMap[obj.week]) {
helperMap[obj.week]['sum'] = obj.value;
helperMap[obj.week]['count'] = 1;
} else {
helperMap[obj.week] = { sum: obj.value, count: 1 };
}
});
const modified = [];
for (let week in helperMap) {
let avgValue = helperMap[week]['sum'] / helperMap[week]['count'];
modified.push({ week, value: avgValue });
}
console.log(modified)
我們也可以使用內置函式以簡短的形式做到這一點,但最好理解這個概念
uj5u.com熱心網友回復:
const a = [
{
value: 1,
week: 'week1',
},
{
value: 2,
week: 'week1',
},
{
value: 3,
week: 'week16',
},
{
value: 4,
week: 'week0',
},
{
value: 5,
week: 'week16',
},
]
let modified = [];
a.forEach(item => {
let match = modified.find(m => m.week === item.week);
if (match) match.value = (match.value item.value);
else modified.push(item);
});
modified.forEach(m => m.value = m.value / a.filter(a => a.week === m.week).length);
console.log(modified)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/481257.html
標籤:javascript 数组 目的
