Суммировать свойства массива в новый массив - PullRequest
0 голосов
/ 28 мая 2020

У меня есть объект со свойствами, например:

myCosts {
 monthlyCost: {
   currency: EUR,
   amount: 10,
 },
weeklyCosts: {
   currency: EUR,
   amount: 100,
 }
}

Мне нужно создать новый объект / массив, который будет иметь тот же тип и свойства, только сумма будет суммой myCosts.monthlyCost.amount + myCosts.weeklyCosts.amount.

Так будет примерно так:

sumCosts {
  monthlyCosts: {
    currency: EUR,
    amount: 110
  }
}

Ответы [ 3 ]

0 голосов
/ 28 мая 2020
function transformCost(myCost) {
   var arr = [...Object.entries(myCost).map((obj)=>obj[1])];
   var sum = arr.reduce((prev,next) => (prev + (next.amount)), 0);
   return {
            monthlyCost: {
                  currency: arr[0].currency,
                  amount: sum
            }
          };
}
0 голосов
/ 28 мая 2020

используйте reduce

const myCosts = {
  monthlyCost: {
    currency: 'EUR',
    amount: 10,
  },
  weeklyCosts: {
    currency: 'EUR',
    amount: 100,
  },
};

const sumCost = {
  monthlyCosts: {
    currency: 'EUR',
    amount: Object.entries(myCosts).reduce(
      (acc, [, {amount}]) => acc + amount,
      0
    ),
  },
};

console.log(sumCost);
0 голосов
/ 28 мая 2020

Прежде всего, вы используете не массив, а объект.

Вы все равно можете использовать Object.entries () и функцию reduce , чтобы получить желаемый результат.

const myCosts = {
 monthlyCost: {
   currency: 'EUR',
   amount: 10,
 },
 weeklyCosts: {
   currency: 'EUR',
   amount: 100,
 }
};

const result = Object.entries(myCosts)
    .reduce((acc, [curKey, curValue]) => {      
      if(curKey.localeCompare('amount')) {    
        acc.montlyCosts.amount += curValue.amount;
      }
      return acc;
    }, 
    {montlyCosts: {currency: 'EUR', amount: 0}}
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...