我正在编写分析数据,我必须初始化小时,天,周,年的(键)计数器计数,以便获得用户活动的频率。我需要为各个时间创建一个点击计数,并相应地增加。访问是通过循环进行的。 我已经完成了这项工作,但是不确定下面的代码是否适合这样做。
if(!analytics.users[message.user].counts.hourly[hour]) {
analytics.users[message.user].counts.hourly[hour] = 0;
}
analytics.users[message.user].counts.hourly[hour] += 1;
if(!analytics.users[message.user].counts.daily[day]) {
analytics.users[message.user].counts.daily[day] = 0;
}
analytics.users[message.user].counts.daily[day] += 1;
...
我已经尝试过x = x + 1 || 0方法,但无效。 另外,有什么办法可以为此设置功能吗?
答案 0 :(得分:2)
您可以使用接收对象和键并执行检查和更新的功能。
function increment(object, key) {
if (!object[key]) object[key] = 0;
++object[key];
}
致电
increment(analytics.users[message.user].counts.hourly, hour);
答案 1 :(得分:1)
我已经尝试过x = x + 1 || 0
您几乎明白了。应该是:
x = x || 0;
x++;
或
x = x + 1 || 1;
因此,将您的代码更改为:
analytics.users[message.user].counts.hourly[hour] =
(analytics.users[message.user].counts.hourly[hour] + 1) || 1
如果未定义analytics.users[message.user].counts.hourly[hour]
,则增量操作将返回NaN
。这是一个falsy
值。因此,它需要1
答案 2 :(得分:0)
您可以创建一个简单的增量函数,如下所示。它首先检查要初始化的密钥,否则将其初始化为0。自从先前创建密钥以来,下一行具有增量的行就可以安全执行。
let message = {
user: "user"
}
let analytics = {
users: {
"user": {
counts: {
}
}
}
}
function incrementAnalytics(analytics, period) {
analytics[period] = analytics[period] || 0;
++analytics[period];
}
let test = analytics.users[message.user].counts;
incrementAnalytics(test, "hourly");
incrementAnalytics(test, "hourly");
incrementAnalytics(test, "daily");
console.log(test);
干杯!