Сумма javascript значение объекта с таким же ключом - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь добавить количество лайков, если дата совпадает. из моего кода у меня одинаковые даты, но разное время суток. Я хочу добавить все лайки этого дня. Вот объект массива дат

var date = [{text: "b", len: 1, Date: "Fri May 01 2020 10:49:01 GMT+0100 (West Africa Standard 
Time)", Source: "Twitter for Android", Likes: 1},
{text: "b", len: 1, Date: "Fri May 01 2020 10:50:03 GMT+0100 (West Africa Standard Time)", Likes: 1},
{text: "b", len: 1, Date: "Fri May 02 2020 10:55:03 GMT+0100 (West Africa Standard Time)",Likes: 4},
 {text: "b", len: 1, Date: "Fri May 02 2020 10:56:03 GMT+0100 (West Africa Standard Time)",Likes: 3},
 {text: "b they will neither comment not like this tweet", len: 47, Date: "Fri May 01 2020 11:35:49 
GMT+0100 (West Africa Standard Time)", Likes: 0}]

Я хочу

 `[{Date: May 01 2020, Likes:3}, {Date: May 02 2020, Likes:7}]`

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Используя момент и loda sh, вы можете добиться этого с помощью этого кода:

var moment = require('moment')
var _ = require('lodash')
var dates = [{text: "b", len: 1, Date: "Fri May 01 2020 10:49:01 GMT+0100 (West Africa Standard Time)", Source: "Twitter for Android", Likes: 1}, {text: "b", len: 1, Date: "Fri May 01 2020 10:50:03 GMT+0100 (West Africa Standard Time)", Likes: 1}, {text: "b", len: 1, Date: "Fri May 02 2020 10:55:03 GMT+0100 (West Africa Standard Time)",Likes: 4}, {text: "b", len: 1, Date: "Fri May 02 2020 10:56:03 GMT+0100 (West Africa Standard Time)",Likes: 3}, {text: "b they will neither comment not like this tweet", len: 47, Date: "Fri May 01 2020 11:35:49 GMT+0100 (West Africa Standard Time)", Likes: 0}];

var datesFormatted = dates.map(d => ({ date: moment(new Date(d.Date)).format("MMM DD YYYY"), likes: d.Likes }));
const result = _(datesFormatted)
  .groupBy('date')
  .map((dateValue, date) => ({
    date: date,
    likes: _.sumBy(dateValue, "likes")
  }))
  .value()
console.log(result)

Результат выглядит так:

[ { date: 'May 01 2020', likes: 2 },
  { date: 'May 02 2020', likes: 7 } ]
0 голосов
/ 08 мая 2020

Вы можете использовать следующий код для получения желаемого результата.

const makeDateString = dateString => {
  const date = new Date(dateString);
  return date.toLocaleString("default", {
    year: "numeric",
    month: "long",
    day: "numeric"
  });
};

const resultObject = date.reduce((likes, item) => {
  const newDateString = makeDateString(item.Date);
  if (likes[newDateString]) {
    likes[newDateString] = likes[newDateString] + item.Likes;
  } else {
    likes[newDateString] = item.Likes;
  }
  return likes;
}, {});

const result = Object.entries(resultObject).map(item => {
  return {
    Date: item[0],
    Likes: item[1]
  };
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...