добавление значения ключа к объекту в typescript

#javascript #angular #typescript

Вопрос:

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

Если тип сделки с объектом === Реструктуризация PM, вставьте новый ключ и значение, а если тип сделки-Местоположение партнера, удалите ежегодные предложения и ежегодные текущие.

Спасибо за любую идею и помощь.

Денежное вознаграждение : 3000, кассовый поток : 4000,

#данные

   this.data.object = [
        {
            "id": 196,
            "name": "Partner Deal ",
            "dealType": "Partner Location Submission",
            "annualRentProposed": null,
            "annualRentCurrent": null,
            "firmTermRemaining": null,
            "firmTermAdded": null,
            "maxAvailableTerm": null,
            "capitalContribution": null,
            "createdOnString": "09/30/2021",
            "fileName": null,
            "serverFileName": null,
            "size": null,
            "absoluteUri": null,
            "sentTo": null
        },
        {
            "id": 197,
            "name": "Buyout Deal Disposition",
            "dealType": "Idle Buyout",
            "annualRentProposed": null,
            "annualRentCurrent": null,
            "firmTermRemaining": null,
            "firmTermAdded": null,
            "maxAvailableTerm": null,
            "capitalContribution": null,
            "createdOnString": "09/30/2021",
            "fileName": null,
            "serverFileName": null,
            "size": null,
            "absoluteUri": null,
            "sentTo": null
        },
        {
            "id": 199,
            "name": "Sublease Deal Disposition",
            "dealType": "Idle Sublease",
            "annualRentProposed": null,
            "annualRentCurrent": null,
            "firmTermRemaining": null,
            "firmTermAdded": null,
            "maxAvailableTerm": null,
            "capitalContribution": null,
            "createdOnString": "09/30/2021",
            "fileName": null,
            "serverFileName": null,
            "size": null,
            "absoluteUri": null,
            "sentTo": null
        },
        {
            "id": 203,
            "name": "Disposition of Location #10532-S",
            "dealType": "PM Restructure",
            "annualRentProposed": null,
            "annualRentCurrent": null,
            "firmTermRemaining": null,
            "firmTermAdded": null,
            "maxAvailableTerm": null,
            "capitalContribution": null,
            "createdOnString": "10/01/2021",
            "fileName": null,
            "serverFileName": null,
            "size": null,
            "absoluteUri": null,
            "sentTo": null
        },
        {
            "id": 214,
            "name": null,
            "dealType": "Approval to Close",
            "annualRentProposed": null,
            "annualRentCurrent": null,
            "firmTermRemaining": null,
            "firmTermAdded": null,
            "maxAvailableTerm": null,
            "capitalContribution": null,
            "createdOnString": "10/04/2021",
            "fileName": null,
            "serverFileName": null,
            "size": null,
            "absoluteUri": null,
            "sentTo": null
        },
        {
            "id": 215,
            "name": "pmpm",
            "dealType": "PM Restructure",
            "annualRentProposed": null,
            "annualRentCurrent": null,
            "firmTermRemaining": null,
            "firmTermAdded": null,
            "maxAvailableTerm": null,
            "capitalContribution": null,
            "createdOnString": "10/05/2021",
            "fileName": null,
            "serverFileName": null,
            "size": null,
            "absoluteUri": null,
            "sentTo": null
        }
    ]
 

Ответ №1:

Мы можем использовать Array.map() , используя простую функцию .map ().

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

По умолчанию мы просто оставляем сделку без изменений.

Можно было бы расширить логику, используемую в «Реструктуризации PM», чтобы добавить дополнительные параметры и для других типов сделок.

 const input = [ { "id": 196, "name": "Partner Deal ", "dealType": "Partner Location Submission", "annualRentProposed": null, "annualRentCurrent": null, "firmTermRemaining": null, "firmTermAdded": null, "maxAvailableTerm": null, "capitalContribution": null, "createdOnString": "09/30/2021", "fileName": null, "serverFileName": null, "size": null, "absoluteUri": null, "sentTo": null }, { "id": 197, "name": "Buyout Deal Disposition", "dealType": "Idle Buyout", "annualRentProposed": null, "annualRentCurrent": null, "firmTermRemaining": null, "firmTermAdded": null, "maxAvailableTerm": null, "capitalContribution": null, "createdOnString": "09/30/2021", "fileName": null, "serverFileName": null, "size": null, "absoluteUri": null, "sentTo": null }, { "id": 199, "name": "Sublease Deal Disposition", "dealType": "Idle Sublease", "annualRentProposed": null, "annualRentCurrent": null, "firmTermRemaining": null, "firmTermAdded": null, "maxAvailableTerm": null, "capitalContribution": null, "createdOnString": "09/30/2021", "fileName": null, "serverFileName": null, "size": null, "absoluteUri": null, "sentTo": null }, { "id": 203, "name": "Disposition of Location #10532-S", "dealType": "PM Restructure", "annualRentProposed": null, "annualRentCurrent": null, "firmTermRemaining": null, "firmTermAdded": null, "maxAvailableTerm": null, "capitalContribution": null, "createdOnString": "10/01/2021", "fileName": null, "serverFileName": null, "size": null, "absoluteUri": null, "sentTo": null }, { "id": 214, "name": null, "dealType": "Approval to Close", "annualRentProposed": null, "annualRentCurrent": null, "firmTermRemaining": null, "firmTermAdded": null, "maxAvailableTerm": null, "capitalContribution": null, "createdOnString": "10/04/2021", "fileName": null, "serverFileName": null, "size": null, "absoluteUri": null, "sentTo": null }, { "id": 215, "name": "pmpm", "dealType": "PM Restructure", "annualRentProposed": null, "annualRentCurrent": null, "firmTermRemaining": null, "firmTermAdded": null, "maxAvailableTerm": null, "capitalContribution": null, "createdOnString": "10/05/2021", "fileName": null, "serverFileName": null, "size": null, "absoluteUri": null, "sentTo": null } ]

 // Function that maps each deal according to the dealType        
function mapDeal(deal, parameters) {
    switch (deal.dealType) {

        case 'PM Restructure':
            // Add any extra parameters for PM Restructure
            return { ...deal, ...(parameters['PM Restructure'] || {})};

        case 'Partner Location Submission':
            // Remove annualRentProposed, annualRentCurrent using object destructuring
            const { annualRentProposed, annualRentCurrent, ...rest } = deal;
            return rest;
         
        default:
            // Leave the deal as it is
            return deal;
    }
}
 
function mapDeals(input, parameters) {
    return input.map(deal => mapDeal(deal, parameters));
}
 
const parameters = { 
    'PM Restructure': { 
        cashContribution: 3000,
        storeCashFlow: 4000
    }
}
 
console.log(mapDeals(input, parameters))
     
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

Комментарии:

1. Сэр , просто дополнительный вопрос , как мы преобразуем в машинописном виде число в сумму, например, ввод 424109, должно быть 424109 . Спасибо.

2. не в угловом шаблоне, а в коде

3. Возможно, вам захочется взглянуть на формат Intl.NumberFormat: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/. … Это приведет к форматированию чисел в соответствии с правилами локали.

4. нам все еще нужно учитывать валюту?

5. кроме того, какой раунд мы используем для округления 11.833333 до 11.8