[英]How do I recursively aggregate values inside of a loop of JavaScript objects?
我在嘗試創建一個 JavaScript 函數時遇到了困難,該函數通過循環遍歷對象的每個對象鍵的值來轉換對象,並且僅當對象鍵(這是一個時間戳)當前為或大於時才將它們相加前面的鍵。
為了直觀地解釋這一點,我試圖通過將前一天的每個值聚合到最近一天來將下圖(看起來不太吸引人)看起來更靠右。
var orderedTimeSeriesObject = {
1573538400: { // Tue, 12 Nov 2019 06:00:00
clicks: 14,
signups: 20
},
1574316000: { // Thu, 21 Nov 2019 06:00:00
clicks: 13,
signups: 15
},
1574488800: { // Sat, 23 Nov 2019 06:00:00
clicks: 0,
signups: 0
}
};
var orderedTimeSeriesObject = {
1573538400: { // Tue, 12 Nov 2019 06:00:00
clicks: 14,
signups: 20
},
1574316000: { // Thu, 21 Nov 2019 06:00:00
clicks: 27,
signups: 35
},
1574488800: { // Sat, 23 Nov 2019 06:00:00
clicks: 27,
signups: 35
}
};
這是我當前的代碼:
var newOrderedTimeSeriesObject = {};
Object.keys(orderedTimeSeriesObject).forEach((timestamp) => {
newOrderedTimeSeriesObject[timestamp] = {};
Object.keys(orderedTimeSeriesObject).forEach((timestampToCompare) => {
if (timestamp >= timestampToCompare) {
Object.values(timestamp).forEach((metric) => {
const metricAggregated = metric + timestampToCompare[metric];
newOrderedTimeSeriesObject[timestamp][metric] = metricAggregated;
});
}
});
});
console.log(newOrderedTimeSeriesObject);
幾個小時以來,我一直在思考這個問題,並在嵌套循環中迷失了方向,並且在嘗試遞歸時迷失了更多自己。 有什么我在這里俯瞰 - 這甚至可能嗎? 任何指導或幫助將不勝感激。
感謝 RK 的回答,這就是我最終的結果:
let lastKey = 0;
let lastValue = null;
for (key in orderedTimeSeriesObject)
{
if (lastKey < key && lastValue != null)
{
Object.keys(orderedTimeSeriesObject[key]).forEach((metric) =>
{
orderedTimeSeriesObject[key][metric] += lastValue[metric];
});
}
lastKey = key;
lastValue = orderedTimeSeriesObject[key];
}
console.log(orderedTimeSeriesObject);
像這樣用for..in
循環試試
var orderedTimeSeriesObject = { 1573538400: { // Tue, 12 Nov 2019 06:00:00 clicks: 14, signups: 20 }, 1574316000: { // Thu, 21 Nov 2019 06:00:00 clicks: 13, signups: 15 }, 1574488800: { // Sat, 23 Nov 2019 06:00:00 clicks: 0, signups: 0 } }; var lastKey =0; var lastValue ={clicks:0,signups:0}; for (key in orderedTimeSeriesObject){ if(lastKey<key){ orderedTimeSeriesObject[key].clicks+= lastValue.clicks; orderedTimeSeriesObject[key].signups+= lastValue.signups; lastValue = orderedTimeSeriesObject[key]; } lastKey = key; } console.log(orderedTimeSeriesObject);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.