Как получить общее количество одинаковых значений ключа, используя обещания? - PullRequest
0 голосов
/ 17 октября 2018

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

var GetFinancial =  function() {
    var promises = [];
    fnancialObj = {};
    /* calculate total for Firsr*/
    let productAdsPaymentEventListArr = [{ "CurrencyAmount": "300" },{ "CurrencyAmount": "200"} ]
    let productAdsTotal = 0;
    productAdsPaymentEventListArr.forEach(function(productAdsPaymentEventListItem, index) {
        let valueType = 'productAdsPaymentTotal'
        promises.push(GetFinancialEventWithTotal(productAdsPaymentEventListItem.CurrencyAmount, productAdsTotal, fnancialObj, valueType))
    })
    /* calculate total of second*/
    let productAdsPaymentEventListArr2 = [{ "CurrencyAmount": "30"},{ "CurrencyAmount": "20"} ]
    let productAdsTotal2 = 0;
    productAdsPaymentEventListArr2.forEach(function(productAdsPaymentEventListItem2, index) {
        let valueType = 'productAdsPaymentTotal2'
        promises.push(GetFinancialEventWithTotal(productAdsPaymentEventListItem2.CurrencyAmount, productAdsTotal2, fnancialObj, valueType))
    })
    Promise.all(promises).then(function(result) {
        console.log("product update or inserted successfully in all ", result)
        resolve(result)
    }).catch(function(err) {
        console.log("err in update or inserted in all promise", err)
    })
}

Определение обещания здесь:

var GetFinancialEventWithTotal = function(chargeComponent, totalCharge, fnancialObj, objectKey) {
    return new Promise(function(resolve, reject) {
        totalCharge = totalCharge + parseFloat(chargeComponent);
        if (totalCharge) {
            fnancialObj[objectKey] = totalCharge;
            resolve(fnancialObj);
        } else {
            reject("There an Error")
        }
    })
}

Я хочу вывод, как это (добавление каждого значения каждого массива в соответствии со значением ключа):

fnancialObj={
    productAdsPaymentTotal : 500,
    productAdsPaymentTotal2 :50,
}

1 Ответ

0 голосов
/ 17 октября 2018

Вам не нужны никакие обещания, если в вашем рабочем процессе нет чего-то асинхронного.Для вашей текущей проблемы вам просто нужно добавить суммы в массив объектов.Вот для чего reduce().Вызовите reduce() для каждого массива, чтобы получить суммы и вернуть объект с обоими результатами.

var GetFinancial =  function() {

    /* calculate total for Firsr*/
    let productAdsPaymentEventListArr = [{ "CurrencyAmount": "300" },{ "CurrencyAmount": "200"} ]
    let productAdsTotal = productAdsPaymentEventListArr.reduce((total, current) => total + parseInt(current.CurrencyAmount), 0);

    /* calculate total of second*/
    let productAdsPaymentEventListArr2 = [{ "CurrencyAmount": "30"},{ "CurrencyAmount": "20"} ]
    let productAdsTotal2 = productAdsPaymentEventListArr2.reduce((total, current) => total + parseInt(current.CurrencyAmount), 0);

    return {
        productAdsPaymentTotal : productAdsTotal,
        productAdsPaymentTotal2 :productAdsTotal2,
    }
    
}
let financials = GetFinancial()
// do any further calculations you want with financials 
console.log(financials)
...