Как я могу пройти по объекту и суммировать сумму для каждого типа платежа?

Поскольку этот поток наткнулся, я собрал несколько точек для новых читателей в this.

Как определено значение this?

Мы используем это подобно тому, как мы используем местоимения в естественных языках, таких как английский: «Джон работает быстро, потому что он пытается поймать поезд». Вместо этого мы могли бы написать «... Джон пытается поймать поезд ».

var person = {    
    firstName: "Penelope",
    lastName: "Barrymore",
    fullName: function () {

    // We use "this" just as in the sentence above:
       console.log(this.firstName + " " + this.lastName);

    // We could have also written:
       console.log(person.firstName + " " + person.lastName);
    }
}

this не присваивается значение, пока объект не вызовет функцию, в которой он определен. В глобальной области действия все глобальные переменные и функции определяются на объекте window. Следовательно, this в глобальной функции относится к (и имеет значение) глобальный объект window.

Когда use strict, this в глобальном и в анонимных функциях, не связанных с каким-либо объектом, имеет значение undefined.

Ключевое слово this g0] наиболее непонятно , когда: 1) мы используем метод, который использует this, 2) мы назначаем метод, который использует this для переменной, 3) функция, которая использует this, передается как функция обратного вызова и 4) this используется внутри замыкания - внутренней функции. (2)

table [/g10]

Что содержит будущее

Определено в сценарии ECMA 6 , стрелка- функции принимают привязку this из охватывающей (функциональной или глобальной) области.

function foo() {
     // return an arrow function
     return (a) => {
     // `this` here is lexically inherited from `foo()`
     console.log(this.a);
  };
}
var obj1 = { a: 2 };
var obj2 = { a: 3 };

var bar = foo.call(obj1);
bar.call( obj2 ); // 2, not 3!

Хотя функции-стрелки предоставляют альтернативу использованию bind(), важно отметить, что они по существу отключают традиционный механизм this в пользу более широкого понимания лексического охвата. (1)


Ссылки:

  1. this & amp; Object Prototypes, автор Kyle Simpson. © 2014 Getify Solutions.
  2. javascriptissexy.com - http://goo.gl/pvl0GX
  3. Ангус Кролл - http: // goo .gl / Z2RacU

0
задан M Developer 16 January 2019 в 12:04
поделиться

2 ответа

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

var obj={  
    "total_rows":59,
    "offset":0,
    "rows":[  
       {  
          "key":"PAY_2019-01-11T12:18:52.085Z",
          "id":"PAY_2019-01-11T12:18:52.085Z",
          "value":110,
          "doc":{  
             "paymentStatus":true,
             "paymentOption":"card",
             "amount":110,
             "tenderedTotal":110,
             "time":"2019-01-11T12:18:52.085Z",
             "orderId":"ORD_2019-01-11T12:18:52.085Z",
             "type":"payment",
             "_id":"PAY_2019-01-11T12:18:52.085Z",
             "_rev":"1-9fdc73a415914311a80db1727fbc593b"
          }
       },
       {  
          "key":"PAY_2019-01-11T16:27:29.553Z",
          "id":"PAY_2019-01-11T16:27:29.553Z",
          "value":66,
          "doc":{  
             "paymentStatus":true,
             "paymentOption":"cash",
             "amount":66,
             "tenderedTotal":66,
             "time":"2019-01-11T16:27:29.553Z",
             "orderId":"ORD_2019-01-11T16:27:29.553Z",
             "type":"payment",
             "_id":"PAY_2019-01-11T16:27:29.553Z",
             "_rev":"1-a58e3811d11c4ca3a92bd1e206e6e0f3"
          }
       },
       {  
          "key":"PAY_2019-01-11T18:12:13.716Z",
          "id":"PAY_2019-01-11T18:12:13.716Z",
          "value":60,
          "doc":{  
             "paymentStatus":true,
             "paymentOption":"account",
             "amount":60,
             "tenderedTotal":152,
             "time":"2019-01-11T18:12:13.716Z",
             "orderId":"ORD_2019-01-11T18:12:13.716Z",
             "type":"payment",
             "fromCustomerAccount":true,
             "customerPayment":false,
             "grandTotal":60,
             "customer":{  
                "type":"account",
                "account_type":"customer",
                "fname":"Mukopaje",
                "lname":"Singogo",
                "phone":"974776247",
                "email":"mukopaje@gmail.com",
                "region":"Other",
                "city":"Lusaka",
                "balance":0,
                "status":true,
                "index":0,
                "_id":"CST_2019-01-03T11:27:22.924Z",
                "_rev":"4-9453c05f151242a39bc5511323bbb820"
             },
             "customerPaid":152,
             "customer_id":"CST_2019-01-03T11:27:22.924Z",
             "credeb":"debit",
             "_id":"PAY_2019-01-11T18:12:13.716Z",
             "_rev":"1-0486777aaf1444bdaa8bcd35dd18c1d9"
          }
       }
    ]
 }
 var a=obj.rows;
 var k={};
 a.forEach((e)=>{
 if(!k.hasOwnProperty(e.doc.paymentOption))
 {
k[e.doc.paymentOption]=0;    
}
if(k.hasOwnProperty(e.doc.paymentOption))
{
    k[e.doc.paymentOption]=Number(k[e.doc.paymentOption])+Number(e.value);
}
})
 console.log(k)

0
ответ дан ellipsis 16 January 2019 в 12:04
поделиться

Что-то вроде этого может быть тем, что вам нужно?

let cash = 0;
let card = 0;
let account = 0;

for (const row of result.rows) {
  switch (row.doc.paymentOption) {
    case 'cash':
      cash += row.doc.amount;
      break;
    case 'card':
      card += row.doc.amount;
      break;
    case 'account':
      account += row.doc.amount;
      break;
    default:
      // Error
  }
}

console.log(`Cash: ${cash}`);
console.log(`Card: ${card}`);
console.log(`Account: ${account}`);

Предполагается, что поле row.doc.amount всегда содержит действительное числовое значение.

0
ответ дан 8ytan 16 January 2019 в 12:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: