Назначьте объект массива со значением, затем умножьте это значение на количество подходящих объектов. - PullRequest
0 голосов
/ 27 июня 2018

Я манипулировал своим массивом, присваивая значение соответствующей строке. Теперь я хочу умножить счет этой строки на значение, которое я присвоил.

Вот мой вывод массива:

0: {gameScore: "R", reportDate: "2018-05-09", value: 2}
1: {gameScore: "M", reportDate: "2018-01-09", value: 1}
2: {gameScore: "M+", reportDate: "2018-02-09", value: 1.5}
3: {gameScore: "M+", reportDate: "2018-01-09", value: 1.5}
4: {gameScore: "M+", reportDate: "2018-02-09", value: 1.5}

Я присвоил gameScore значение:

const SCORES = {
    'R': 2,
    'M': 1,
    'M+': 1.5,
}

Я хочу получить общее количество подходящих объектов, например, «M +» = 3, затем умножьте это на начальное значение, которое я установил 'M+': 1.5,, так что "M+" в конечном итоге будет '4.5'

var calculation = _(observations)
          .filter(observation => {
            return (
                moment(observation.reportDate).year() == moment().subtract('years', 1).year() && moment(observation.reportDate).month() > moment().subtract('years', 1).month()) ||
              (moment(observation.reportDate).year() == moment().year() && moment(observation.reportDate).month() < moment().month());
          })
          .omitBy(x => x.gameScore === "NULL")
          .map(observation => ({ ...observation,
            value: SCORES[observation.gameScore]
          }))
          .value();

Я предполагаю, что мне нужно что-то сделать со значением: SCORES[observation.gameScore], чтобы получить количество объектов и выполнить умножение, прежде чем оно достигнет этой точки?

Вот скрипка с другими уже используемыми вычислениями https://jsfiddle.net/xdtk2gn6/

Использование lodash & ES6 - спасибо заранее:)

1 Ответ

0 голосов
/ 27 июня 2018

Вы можете использовать Array#reduce для этого:

const data = [
{gameScore: "R", reportDate: "2018-05-09", value: 2},
{gameScore: "M", reportDate: "2018-01-09", value: 1},
{gameScore: "M+", reportDate: "2018-02-09", value: 1.5},
{gameScore: "M+", reportDate: "2018-01-09", value: 1.5},
{gameScore: "M+", reportDate: "2018-02-09", value: 1.5}
];

const SCORES = {
    'R': 2,
    'M': 1,
    'M+': 1.5,
};

let result = data.reduce((acc, curr) => {
  acc[curr.gameScore] = acc[curr.gameScore] || 0; //Init value to 0 if it doesn't exist
  acc[curr.gameScore] += curr.value*SCORES[curr.gameScore]; //Add the current value * SCORE
  return acc;
},{});
console.log(result);
...