簡體   English   中英

我應該如何重構這段代碼,以便只更改每個實例的參數?

[英]How should I refactor this code so I only change the parameters for each instance?

我應該如何重構這段代碼,以便只更改每個實例的參數? 而不是調用 capatilizeFirstLetter function 並要求它拆分和加入有效負載,我想在單獨的 function 中執行它並且只更改每個實例的參數

const capitalizeFirstLetter = (string) => {
    return string.charAt(0).toUpperCase() + string.slice(1)
}

    for (let i = 0; i < keys.length; i += 2) {
        blocks.push({
            type: 'section',
            fields: [
                {
                    type: 'mrkdwn',
                    text: `*${capitalizeFirstLetter(keys[i])
                        .split(/(?=[A-Z])/)
                        .join('')}:*\n${payload[keys[i]]}`,
                },
                {
                    type: 'mrkdwn',
                    text: `*${capitalizeFirstLetter(keys[i + 1])
                        .split(/(?=[A-Z])/)
                        .join('')}:*\n${payload[keys[i + 1]]}`,
                },
            ],
        })
    }

    if (lastKey) {
        blocks.push({
            type: 'section',
            fields: [
                {
                    type: 'mrkdwn',
                    text: `*${capitalizeFirstLetter(lastKey)
                        .split(/(?=[A-Z])/)
                        .join('')}:*\n${payload[lastKey]}`,
                },
            ],
        })
    }

    return blocks
}

我將從創建做一件事的函數開始:

 const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1); const formatKey = key => capitalizeFirstLetter(key).split(/(?=[AZ])/).join(''); function createField([key, value]) { return { type: 'mrkdwn', text: `*${formatKey(key)}:*\n${value}` }; } function groupByN(arr, n) { const groups = []; while (arr.length > 0) { groups.push(arr.splice(0, n)); } return groups; } function createBlocks(payload) { const entries = Object.entries(payload); const groupsOfTwo = groupByN(entries, 2); return groupsOfTwo.map(group => ({ type: 'section', fields: group.map(createField) })); } const res = createBlocks({ firstName: 'John', lastName: 'Doe', age: 30, profession: 'Actor', films: 35 }); console.log(res);
 .as-console-wrapper { max-height: 100%;important; }

然后您可以決定是否要將所有內容合並到單個 function 中:

 const capitalizeFirstLetter = str => str.charAt(0).toUpperCase() + str.slice(1); function createBlocks(payload) { const entries = Object.entries(payload); const groupsOfTwo = []; while (entries.length > 0) { groupsOfTwo.push(entries.splice(0, 2)); } return groupsOfTwo.map(group => ({ type: 'section', fields: group.map(([key, value]) => ({ type: 'mrkdwn', text: `*${ capitalizeFirstLetter(key).split(/(?=[AZ])/).join('') }:*\n${value}` })) })); } const res = createBlocks({ firstName: 'John', lastName: 'Doe', age: 30, profession: 'Actor', films: 35 }); console.log(res);
 .as-console-wrapper { max-height: 100%;important; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM