Обновление определенной строки массива JSON - PullRequest
1 голос
/ 23 сентября 2019

У меня проблема в том, что я возвращаю набор кредитных карт пользователей с полосы.Поскольку Stripe отделяет карточку по умолчанию или «источник» от объекта карточек, мне нужно добавить ответ обратно в мое приложение.мое приложение имеет структуру с переменной isDefault BOOL.Часть приложения на самом деле не может быть изменена.

В коде JSON, который я разместил ниже, я сделал несколько комментариев с aarows относительно того, куда я хочу добавить новый ключ: значение.Короче говоря, если какая-либо из собственных карт {} соответствует карте по умолчанию, которую имеет пользователь, я хочу вставить значение ключа: "isDefault": true ТОЛЬКО в {}, которое соответствует карте по умолчанию.

Я играл с этим некоторое время, и я застрял.Я использовал цикл for для поиска в массиве соответствующего идентификатора карты, но не могу понять, как добавить его в конкретную {} карты, просто добавив ее во весь массив.

JSON Responseс комментариями:

{
    "cardsData": [
        {
            "id": "card_328746328746",  
            "object": "card",
            "address_city": null,
            "address_country": null,
            "address_line1": null,
            "address_line1_check": null,
            "address_line2": null,
            "address_state": null,
            "address_zip": null,
            "address_zip_check": null,
            "brand": "Discover",
            "country": "US",
            "customer": "cus_djklfhdskljfhs",
            "cvc_check": "pass",
            "dynamic_last4": null,
            "exp_month": 9,
            "exp_year": 2023,
            "fingerprint": "dfhsdkljfsdlkf",
            "funding": "credit",
            "last4": "1117",
            "metadata": {},
            "name": null,
            "tokenization_method": null
        },
        {
            "id": "card_kjdslhfjdhf",  <-- HAPPENS TO BE DEFAULT CARD, NEED TO INSERT HERE
            "object": "card",
            "address_city": null,
            "address_country": null,
            "address_line1": null,
            "address_line1_check": null,
            "address_line2": null,
            "address_state": null,
            "address_zip": null,
            "address_zip_check": null,
            "brand": "Visa",
            "country": "US",
            "customer": "cus_dkljfhdkjfhd",
            "cvc_check": "pass",
            "dynamic_last4": null,
            "exp_month": 4,
            "exp_year": 2054,
            "fingerprint": "dfjsklkjfhsd",
            "funding": "credit",
            "last4": "4242",
            "metadata": {},
            "name": null,
            "tokenization_method": null
            "isDefault": true  <-- THIS CURRENTLY DOES NOT EXIST, THIS IS WHERE I NEED HELP TO GET THIS INSERTED
        }
    ]
}

Узел JS / код функции облака:

exports.getCardsTest = functions.https.onRequest((req, res) => {
    if (req.method !== 'POST') {
        return;
    }
    const customerId = req.body.stripeId;
    stripe.customers.retrieve(
        customerId,
        {

        },
        function (err, customer) {
            const cardsData = customer.sources.data;
            const defaultCard = customer.default_source;

            var isDefault = false;  //check of vairable value
            console.log('isDefault before:', isDefault);

            for (var i = 0; i < cardsData.lenth; i++); {
                if (cardsData[i].id == defaultCard);
                isDefault = true;
                cardsData.push({ isDefault });   <--THIS IS WHERE I NEED HELP, I NEED isDefault: true APPENDED TO THE ARRAY STRING {} MATCHING THE KEY VALUE OF THE DEFAULT CARD
            };

            console.log('isDefaultAfter:', isDefault);  // check to make sure IF statement is working

            return res.status(200).send({ cardsData });
        }
    );

});

1 Ответ

1 голос
/ 23 сентября 2019

вы можете обновить значение в массиве следующим образом

for (var i = 0; i < cardsData.length; i++); {
  if (cardsData[i].id === defaultCard) {
    cardsData[i].isDefault = true
  }
}

ваш if был бесполезен, так как часть отсутствовала, также вы вставляли внутрь массива карт, я думаю, что

...