Javascript массив уменьшает возвращаемый ноль вместо неопределенного - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть пример массива, который я пытаюсь уменьшить на количество вхождений ключа (настроение в этом примере):

const sentimentLog = [
  {
    id: 1,
    createdOn: new Date('2020-02-13'),
    sentiment: 1
  },
  {
    id: 2,
    createdOn: new Date('2020-02-12'),
    sentiment: 1
  },
  {
    id: 3,
    createdOn: new Date('2020-02-12'),
    sentiment: 2
  },
  {
    id: 4,
    createdOn: new Date('2020-02-11'),
    sentiment: 3
  },
  {
    id: 5,
    createdOn: new Date('2020-02-11'),
    sentiment: 2
  },
  {
    id: 6,
    createdOn: new Date('2020-02-10'),
    sentiment: 1
  },
  {
    id: 7,
    createdOn: new Date('2020-02-10'),
    sentiment: 2
  },
  {
    id: 8,
    createdOn: new Date('2020-02-09'),
    sentiment: 1
  }
]

Я использую:

const sentimentGrouped = (sentiments) => {
  return sentiments.reduce((hash, { sentiment }) => {
    hash[sentiment] = (hash[sentiment] || 0) + 1
    return hash
  }, [])
}

И это почти там. Что я не могу понять, так это как заменить undefined, когда нет оценок чувств 0 (что вполне возможно).

console.log('sentimentGrouped', sentimentGrouped(sentimentLog))

Выше приведено:

"sentimentGrouped" [undefined, 4, 3, 1]

Принимая во внимание, что я хотел бы:

"sentimentGrouped" [0, 4, 3, 1]

Чего мне не хватает?

Заранее спасибо.

Редактировать: Я уточню немного дальше, есть 4 баллы, которые будут возвращены (от 0 до 3). Возвращенные данные будут основаны на диапазоне дат. Так что могут быть случаи, когда не будет возвращено 1 с, аналогично 3 не будет возвращено в другом диапазоне дат.

1 Ответ

4 голосов
/ 14 февраля 2020

Проблема в том, что если вы никогда не касаетесь элемента массива, он остается дырой в массиве, что означает, что он рассматривается как неопределенный. Поскольку вы знаете длину массива, я бы просто заполнил массив нулями. Любая оценка настроения будет увеличиваться. Любой, который не останется с его первоначальным значением.

return sentiments.reduce((hash, { sentiment }) => {
  hash[sentiment] = hash[sentiment] + 1
  return hash
}, [0, 0, 0, 0])
...