![](/img/trans.png)
[英]How should I refactor this code to prevent function was used before it was defined
[英]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.