Что может быть лучше для инициализации с нуля или приращения для объектов? - PullRequest
0 голосов
/ 25 января 2019

Я пишу аналитику, и мне нужно инициализировать счетчики для (ключей) часов, дней, недель, лет, чтобы получить частоту действий пользователя.Мне нужно создать счетчик совпадений для соответствующего времени и приращения соответственно.Посещения подаются через петлю.У меня это работает, но я не уверен, что код ниже идеально подходит для этого.

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 метод, но это не сработало.Кроме того, есть ли способ, которым я могу настроить функцию для этого?

Ответы [ 3 ]

0 голосов
/ 25 января 2019

Вы можете использовать функцию, которая берет объект и ключ и выполняет проверку и обновление.

function increment(object, key) {
    if (!object[key]) object[key] = 0;
    ++object[key];
}

Позвонить с

increment(analytics.users[message.user].counts.hourly, hour);
0 голосов
/ 25 января 2019

Вы можете создать простую функцию приращения, подобную приведенной ниже.Сначала он проверяет инициализируемый ключ, а если нет, инициализирует его как 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);

Ура!

0 голосов
/ 25 января 2019

Я пробовал 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...