Поскольку этот поток наткнулся, я собрал несколько точек для новых читателей в 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)
[/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)
Ссылки:
Вы можете использовать это: он перебирает свойство строки и получает тип и стоимость платежа. Если тип платежа уже находится в объекте, он добавляется к нему, иначе он создает свойство.
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)
Что-то вроде этого может быть тем, что вам нужно?
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
всегда содержит действительное числовое значение.